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 :

Empêcher enregistrement quand on quitte formulaire de saisie [AC-2016]


Sujet :

IHM

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur environnement
    Inscrit en
    Juillet 2017
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur environnement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 97
    Points : 34
    Points
    34
    Par défaut Empêcher enregistrement quand on quitte formulaire de saisie
    Bonjour à tous !

    Je suis actuellement en train de travailler sur un formulaire de saisie qui marche plutôt bien, avec un bouton pour sauvegarder l'enregistrement et un bouton pour effacer les champs. Je vous explique en quelques mots : Mon formulaire de saisie est configuré en mode entrée de données avec ajouts autorisés, comme ça quand je le lance tout est vide et j'ai juste à compléter mon formulaire. Il est lié à la table référence, quand je rentre une entrée et que je clique sur le bouton elle va s'enregistrer dans ma table référence.

    Mais j'ai un problème assez embêtant que je vais essayer de décrire au mieux.

    Quand je lance le formulaire, je peux remplir mes champs soit par zone de texte soit via combobox.
    Cependant, si je ne rentre rien et que je ferme le formulaire, même sans enregistrer, il va me sauvegarder l'entrée dans ma table de référence... Même après le bouton qui vide les champs. Ce qui fait que dès que j'ouvre et ferme le formulaire même sans rentrer de données il va m'enregistrer une entrée "vide".

    Est ce qu'il y a moyen de faire en sorte qu'il ne m'enregistre pas l'entrée quand je quitte ? Qu'il ne me l'enregistre QUE quand je clique sur le bouton ?

    Mon code sur le bouton pour vider les champs :

    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
    Option Compare Database
     
    Private Sub Commande160_Click()
     
    Dim Ctrl As Control
    For Each Ctrl In Me.Controls
         If TypeOf Ctrl Is TextBox Then
               Ctrl.Value = ""
         End If
         If TypeOf Ctrl Is ComboBox Then
               Me!Marché.Value = Null
               Me!Mission.Value = Null
               Me!Rejet.Value = Null
               Me!Unité.Value = Null
               Me!Département.Value = Null
               Me!Filière.Value = Null
               Me!Effluent.Value = Null
               Me!Date.Value = Null
         End If
     
    Next Ctrl
     
     
    End Sub
    Je n'ai pas de code sur le bouton pour ajouter l'enregistrement, je l'ai fait avec l'assistant et c'est une maccro. Je cherche actuellement comment le coder en VBA mais si quelqu'un à cela sous la main je suis preneur.

    Je vous remercie d'avance pour votre aide Bon week end à tous!

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 004
    Points : 24 595
    Points
    24 595
    Par défaut
    Bonjour,

    Tu trouveras beaucoup de littérature sur ce sujet. Et beaucoup d'approche aussi.

    Pour comprendre pourquoi tu as ce comportement (normal) il faut connaître la mécanique d'ACCESS.

    Lorsque tu modifies un enregistrement "nouveau" (choix d'un liste, entrée au clavier dans une zone de texte, clic sur une case à cocher) l'enregistrement est automatiquement créé dans la table. si tu as un NuméroAuto celui-ci s'incrémente.
    Que tu sauves ou non, il existe puisque ACCESS écrit les données dans chaque champ à la perte de focus de celui-ci.

    Partant de ce constat plusieurs solutions s'offre à toi.

    1) travailler sur un espace temporaire (table, table en mémoire, simples variables, propriétés de classe) puis copier les informations au moment de la sauvegarde.
    2) effacer l'enregistrement si l'utilisateur n'appuie pas sur Enregistrer.

    La première solution est plus complexe que la seconde mais est plus propre pour la table et sollicite moins la SGDB.
    La seconde a l'avantage d'exister (cf la classe Mela).

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur environnement
    Inscrit en
    Juillet 2017
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur environnement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 97
    Points : 34
    Points
    34
    Par défaut
    Bonjour, merci de ta réponse.

    Le plus simple pour moi serait la solution 2, en gros il faudrait que j'ai un bouton "Fermer" ou "Annuler" avec un code qui me supprimerais l'enregistrement en cours ?

    Il faut ensuite que je vois si il me l'enregistre ou pas si je vide les filtres avec ma commande, mais je peux rajouter le code dans mon bouton "effacer".

    EDIT : Alors j'ai trouvé ce bout de code sur le forum :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Form_BeforeUpdate(Cancel As Integer)
     
        If MsgBox("L'enregistrement a été modifié. Voulez-vous sauvegarder les modifications", vbExclamation + vbYesNo, "CONFIRMATION") = vbNo Then
          Me.Undo 'Annule les modifications
          Cancel = False                
        End If
     
    End Sub
    Ca marche bien, c'est pas exactement ce que je cherchais mais au moins si je quitte et clic sur non il ne m'enregistre rien.

    EDIT : Bon alors après plusieurs essais il semblerait que ça marche bien. Je vais l'adapter sur un bouton qui ferme le formulaire si possible...

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

Discussions similaires

  1. Comprendre demande d'enregistrement quand on quitte
    Par Lucas Panny dans le forum Visual C++
    Réponses: 4
    Dernier message: 06/12/2007, 09h55
  2. Réponses: 1
    Dernier message: 06/05/2007, 15h25
  3. Réponses: 4
    Dernier message: 24/01/2007, 15h59
  4. Réponses: 2
    Dernier message: 08/08/2006, 22h17
  5. Réponses: 2
    Dernier message: 11/05/2006, 10h41

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