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

IHM Discussion :

[formulaire] Annuler des modifications


Sujet :

IHM

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de stéphane_ais2
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 792
    Par défaut [formulaire] Annuler des modifications
    Bonjour,

    J'utilise un frm indépendant associé à un sous frm pour saisir de nouvelles données.
    Les données sont enregistrés dans les tables ad hoc par du code Vba.

    Pour des raisons pratiques j'ai souhaité utiliser ce même frm toujours associé au même sous-frm pour effectuer des consultations, des modifications et des suppressions.
    Pour cela, j'ai attribué aux deux frm (Main et sub) une source de données basée sur deux tables temporaires.

    A l'ouverture de ces deux objets, l'utilisateur ne peut rien modifier. Pour cela, il doit cliquer dans une zone de texte et le frm principal et le sous frm deviennent modifiables.
    La modification est validée par un bouton 'Modifier' qui sur l'évenement 'clic' propose ou non de valider les modifications apportées.
    Je ne parviens pas, lorsque l'utilisateur choisit de ne pas valider ses modifications, à rétablir dans les contrôles du frm principal et du sous frm les valeurs initiales d'avant la modifications.

    J'ai essayé la méthode 'RunCommand acCmdUndo'? Elle renvoie une erreur qui suggère qu'un évenement BeforeUpdate est en cours (sûrement relatif aux modifications du sfrm)...le btn 'Modifier' se trouvant sur le frm principal.

    J'ai lu de nombreux posts sur des sujets proches et notamment celui-ci :
    http://www.developpez.net/forums/sho...highlight=undo
    qui m'a inquiété et notamment la réponse #11 avec comme point d'orgue cette réflexion dont je me sens très proche :
    Cela pose de très nombreux problèmes complexes auxquels je ne m'attendais pas du tout

    Je souhaite garder l'interface actuelle, un btn 'Modifier' qui valide ou non les changements et ne pas intervenir directement sur les évenements BeforeUpdate des deux frms.
    J'ai pensé aussi "réinjecter" les valeurs des tables temporaires dans les contrôles...sans l'avoir testé encore.

    Je mets le code actuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    Select Case MsgBox("Les modifications seront définitives. Voulez-vous continuer ?", vbYesNo Or vbCritical Or vbDefaultButton1, "ATTENTION : Action irréversible")
     
        Case vbYes
            'enregistre les données du frm pour éviter
            'le conflit d'écriture avec le code de mise
            'à jour qui suit.
            DoCmd.RunCommand acCmdSaveRecord
     
            With tbl
                .Edit
                ![fa_titre_responsable] = cboCivilite
                ![fa_nom_responsable] = txtNom
                ![fa_adresse_1] = txtAdresse
                ![fa_commune] = cboCommune
                .Update
            End With
            With tblEl
                .Edit
                ![el_nom] = sf("txtElNom")
                ![el_prenom] = sf("txtElPrenom")
                ![el_ddn] = sf("txtDdN")
                ![el_sexe] = sf("cboElSexe")
                .Update
            End With
     
            Call MsgBox("Les modifications demandées ont été effectuées avec succès.", vbInformation, "Procédure terminée")
     
        Case vbNo
            DoCmd.RunCommand acCmdUndo
     
            Call MsgBox("Les modifications ont été annulées.", vbInformation, "Procédure annulée")
     
        End Select
    Merci par avance pour vos avis.

    SE

  2. #2
    Membre Expert
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Par défaut
    Malheureusement, je te conseillerrais de ne pas perséverer dans ce sens. Access apporte énormément de choses intéressante tant que tu restes dans le mode de fonctionnement d'access. Des que tu essayes de trop outrepassé le fonctionnement standard, tu te trouves face a des problèmes continuel.

    Un exemple par rapport à ce que tu donnes : tu dis, je ne veux que l'utilisateur ne puisse valider que par le bouton 'Modifier'.

    Comment va tu empoécher l'enregistrement automatique que fais access des que tu fermes le formulaire ?

    Les touches F9 et ctrl+entrée provoque aussi l'enregistrement des données. Le défilement dans le recordset va te poser des problèmes aussi.


    Si tu tiens vraiment à coder "à la main", fait le entièrement, controle entièrement indépendant que tu remplis à chaque appel de fonction, lecture, modification, suppression, etc....

    Si tu persistes dans cette voie je te souhaite bien du courage.

  3. #3
    Membre émérite Avatar de stéphane_ais2
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 792
    Par défaut
    Merci pour ta réponse.
    Ce choix de développement offre à mes yeux plus d'avantages que de problèmes soulevés.
    Celui que je soumets aujourd'hui ne doit pas être insurmontable même si j'échoue à le résoudre encore.
    La gestion des risques que tu envisages (contrôle de l'enregistrement) passe par l'interface proposée à l'utilisateur et ce qui lui est possible de faire ou pas selon l'état de la procédure dans laquelle il se situe.
    Je te rejoins cependant sur le point de travailler sur des forms complétement indépendants et pas comme je tente de le faire sur ce cas précis en attribuant un recordSource au formulaire. Ce qui est déjà une bonne piste...

    SE

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Par défaut [Form] Transaction pour annuler des modifications
    Bonjour,

    Citation Envoyé par stéphane_ais2
    Je te rejoins cependant sur le point de travailler sur des forms complétement indépendants et pas comme je tente de le faire sur ce cas précis en attribuant un recordSource au formulaire. Ce qui est déjà une bonne piste...
    Il y a quelques temps, j'avais planché sur un Pb du même ordre, voire un peu plus complexe, puisqu'il était possible d'annuler des modifications apportées à plusieurs enregistrements.

    Ma solution était basée sur un Form dépendant d'un Recordset assigné "à la main" et "protégé" par une transaction.
    http://www.developpez.net/forums/showthread.php?t=71989

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Par défaut
    Salut,

    J'utilise une méthode similaire :

    mon formulaire principal est indépendant. Je charge les données de l'enregistrement ciblé par code (ouverture d'un recordset, affectation aux différents contrôles de la valeur d'un champ). Pour les sous formulaire, j'utilise une table temporaire (par code j'y mets les enregistrements dont j'ai besoin)

    Sur validation des modif, je modifie mon recordset avec les valeurs des contrôles et de la table temporaire.

    En cas d'annulation, je réutilise simplement la fonction qui initialise le formulaire et le sous-formulaire.

    Je sais que ce n'est peut-être pas l'idéal d'un point de vu ressource et concept, mais comme je ne maitrise pas les transactions, c'est la méthode que j'ai retenu.

    A+

  6. #6
    Membre émérite Avatar de stéphane_ais2
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 792
    Par défaut
    Bonjour et merci pour vos réponses et suggestions

    Je vais privilégier aujourd'hui la proposition de Muhad'hib qui fonctionne très bien et garder pour bientôt l'idée des transactions que je ne connaissais pas (entre autres choses d'ailleurs... )

    Merci encore

    SE

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/10/2010, 15h46
  2. Gérer l'annulation des modifications
    Par greenzephyr dans le forum Windows Presentation Foundation
    Réponses: 9
    Dernier message: 08/03/2010, 18h56
  3. Binding forms - annulation des modifs
    Par thorgal1612 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 07/07/2009, 17h27
  4. Annuler des modifications sur BindingSource.Current
    Par BnJ99 dans le forum Framework .NET
    Réponses: 3
    Dernier message: 29/06/2007, 14h34
  5. Sauvegarde des modifs à la sortie d'un formulaire
    Par Jik70 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 02/05/2006, 10h13

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