A voir également:
- Fermer formulaire sans sauvegarde sous access
- Whatsapp formulaire opposition - Guide
- Logiciel de sauvegarde gratuit - Guide
- Formulaire de réclamation facebook compte désactivé - Guide
- Sauvegarde facile - Télécharger - Sauvegarde
- Formulaire de reclamation instagram - Guide
10 réponses
J'ai eu le mm probleme.
Je l'ai corriger de cette maniere :
1) creer un bouton fermer
2) dans le code mettre ca:
Private Sub Fermer_Click()
On Error GoTo Err_Fermer_Click
DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70
DoCmd.Close
Exit_Fermer_Click:
Exit Sub
Err_Fermer_Click:
If (Err.Number = 2046) Then
DoCmd.Close
Else
MsgBox Err.Description
Resume Exit_Fermer_Click
End If
End Sub
Voila.
BOn courage.
Je l'ai corriger de cette maniere :
1) creer un bouton fermer
2) dans le code mettre ca:
Private Sub Fermer_Click()
On Error GoTo Err_Fermer_Click
DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70
DoCmd.Close
Exit_Fermer_Click:
Exit Sub
Err_Fermer_Click:
If (Err.Number = 2046) Then
DoCmd.Close
Else
MsgBox Err.Description
Resume Exit_Fermer_Click
End If
End Sub
Voila.
BOn courage.
En simulant l'appui sur la touche échapp (--> sendkeys {esc} lors de l'évènement fermeture de ton formulaire) ça devrait le faire...
Salut,
il n'est pas possible de quitter sans sauvegarder les données, puisqu'access met à jour dès que tu passes au champ suivant.
La seule solution, si le formulaire est mono-enregistrement (pas en mode continu), est effectivement d'appuyer sur ESC (ou de le faire faire avec SENDKEY) pour annuler les modifs faites à l'enregistrement en cours.
A+ Blux
il n'est pas possible de quitter sans sauvegarder les données, puisqu'access met à jour dès que tu passes au champ suivant.
La seule solution, si le formulaire est mono-enregistrement (pas en mode continu), est effectivement d'appuyer sur ESC (ou de le faire faire avec SENDKEY) pour annuler les modifs faites à l'enregistrement en cours.
A+ Blux
"Les cons, ça ose tout. C'est même à ça qu'on les reconnait"
Merci pour vos reponses !
Mais... en fait j'ai cherché sur le net, et j'ai associé un bouton 'quitter sans sauver' au code suivant :
Me.Undo
docmd.close
et ca marche très bien pour le formulaire principal.
Cependant j'ai des sous formulaires qui eux gardent les modifs. Je n'arrive pas à y faire réference pour leur associer undo également...
Mais... en fait j'ai cherché sur le net, et j'ai associé un bouton 'quitter sans sauver' au code suivant :
Me.Undo
docmd.close
et ca marche très bien pour le formulaire principal.
Cependant j'ai des sous formulaires qui eux gardent les modifs. Je n'arrive pas à y faire réference pour leur associer undo également...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Peux-tu associer le code .undo à l'évènement 'sur fermeture' des sous-formulaires ?
A+ Blux
A+ Blux
"Les cons, ça ose tout. C'est même à ça qu'on les reconnait"
Bonjour !
Hum non ca ne fonctionne pas.
Je ne sais pas si access les considère comme ouverts de plus comme ce sont des sous formulaires affichés par mon formulaire directement ?
J'ai essayé après maj mais bon, je me suis baladée sur des forums anglo et je me suis rendue compte que après maj veut bien dire ce que ca veut dire, la maj est déja faite donc ce n'est pas bon non plus.
Ca marche bien avec avant maj mais ca à peu d'interet :)
J'ai lu aussi qu'une solution était peut être d'ouvrir une table intermediaire, copie de la table d'origine, et de supprimer les données de cette table si on ne fait pas de changements, ou d'updater la vrai table avec la copie si on fait des changements...
Mais là ca me parait 1. Pas propre, 2. Compliqué :p
Hum non ca ne fonctionne pas.
Je ne sais pas si access les considère comme ouverts de plus comme ce sont des sous formulaires affichés par mon formulaire directement ?
J'ai essayé après maj mais bon, je me suis baladée sur des forums anglo et je me suis rendue compte que après maj veut bien dire ce que ca veut dire, la maj est déja faite donc ce n'est pas bon non plus.
Ca marche bien avec avant maj mais ca à peu d'interet :)
J'ai lu aussi qu'une solution était peut être d'ouvrir une table intermediaire, copie de la table d'origine, et de supprimer les données de cette table si on ne fait pas de changements, ou d'updater la vrai table avec la copie si on fait des changements...
Mais là ca me parait 1. Pas propre, 2. Compliqué :p
y'aurait un truc à essayer, mais c'est tordu !
Déclarer une transaction à l'ouverture du formulaire
Modifier les données
Valider ou non la transaction à la fermeture (commit ou rollback)
Sans garantie...
A+ Blux
Déclarer une transaction à l'ouverture du formulaire
Modifier les données
Valider ou non la transaction à la fermeture (commit ou rollback)
Sans garantie...
A+ Blux
"Les cons, ça ose tout. C'est même à ça qu'on les reconnait"
Merci pour ton aide c'est gentil.
Je viens de regarder l'aide d'access pour les transactions. Je ne connaissais pas ça, ca à l'air assez puissant mais à tester.
Pourrais tu m'aider sur l'emploi de cette fonction ?
Si j'ai compris a l'ouverture du formulaire je fait un workspace.BeginTrans et si je sauve je fait CommitTrans, sinon Rollback ?
Mais quelle est la syntaxe exacte des transactions ? :p
Merci
Je viens de regarder l'aide d'access pour les transactions. Je ne connaissais pas ça, ca à l'air assez puissant mais à tester.
Pourrais tu m'aider sur l'emploi de cette fonction ?
Si j'ai compris a l'ouverture du formulaire je fait un workspace.BeginTrans et si je sauve je fait CommitTrans, sinon Rollback ?
Mais quelle est la syntaxe exacte des transactions ? :p
Merci
Une transaction est définie (en gros) par tout traitement cohérent modifiant les données.
Voilà un exemple de code :
On déclare une transaction, on exécute un certain nombre de requête, si l'une d'elle vient à mal fonctionner, alors on revient à l'état initial (fait automatiquement puisque dans ce cas, on ne va jamais au commit)
Dim Ws As Workspace
Dim Bds As Database
Dim Req As QueryDef
Set Ws = DBEngine.Workspaces(0)
Set Bds = CurrentDb
' Effacement des tables temporaires (gestion des modifs)
Ws.BeginTrans
Set Req = Bds.QueryDefs("R_Efface_Dat-heure")
Req.Execute
Set Req = Bds.QueryDefs("R_Efface_T-Gamelle")
Req.Execute
Set Req = Bds.QueryDefs("R_Efface_T-UMC/Gamelle")
Req.Execute
Set Req = Bds.QueryDefs("R_Efface_T-Umc")
Req.Execute
Set Req = Bds.QueryDefs("R_Efface_T-Volset")
Req.Execute
Set Req = Bds.QueryDefs("R_Efface_T-Historique")
Req.Execute
Set Req = Bds.QueryDefs("R_Efface_System")
Req.Execute
Ws.CommitTrans
Mais j'ai des doutes quant au fonctionnement à l'intérieur d'un formulaire, car ce n'est pas géré en VB mais directement par l'exécutable d'ACCESS, des GROS doutes ! :-)
A+ Blux
Voilà un exemple de code :
On déclare une transaction, on exécute un certain nombre de requête, si l'une d'elle vient à mal fonctionner, alors on revient à l'état initial (fait automatiquement puisque dans ce cas, on ne va jamais au commit)
Dim Ws As Workspace
Dim Bds As Database
Dim Req As QueryDef
Set Ws = DBEngine.Workspaces(0)
Set Bds = CurrentDb
' Effacement des tables temporaires (gestion des modifs)
Ws.BeginTrans
Set Req = Bds.QueryDefs("R_Efface_Dat-heure")
Req.Execute
Set Req = Bds.QueryDefs("R_Efface_T-Gamelle")
Req.Execute
Set Req = Bds.QueryDefs("R_Efface_T-UMC/Gamelle")
Req.Execute
Set Req = Bds.QueryDefs("R_Efface_T-Umc")
Req.Execute
Set Req = Bds.QueryDefs("R_Efface_T-Volset")
Req.Execute
Set Req = Bds.QueryDefs("R_Efface_T-Historique")
Req.Execute
Set Req = Bds.QueryDefs("R_Efface_System")
Req.Execute
Ws.CommitTrans
Mais j'ai des doutes quant au fonctionnement à l'intérieur d'un formulaire, car ce n'est pas géré en VB mais directement par l'exécutable d'ACCESS, des GROS doutes ! :-)
A+ Blux
"Les cons, ça ose tout. C'est même à ça qu'on les reconnait"
J'ai craquée en cedant à la simplicité :p
Apres chaque ligne saisie d'un sous formulaire je demande si on veut sauver ou non, plutot que de tout essayer de centraliser sur un bouton.
J'ai une vbquestion à la propriété avant maj de chaque sous formulaire et si on dit non : me.undo.
Pas super fun pour l'utilisateur mais tellement plus simple pour moi.
Merci pour ton aide !
Apres chaque ligne saisie d'un sous formulaire je demande si on veut sauver ou non, plutot que de tout essayer de centraliser sur un bouton.
J'ai une vbquestion à la propriété avant maj de chaque sous formulaire et si on dit non : me.undo.
Pas super fun pour l'utilisateur mais tellement plus simple pour moi.
Merci pour ton aide !
Ton code ne supprime que la derniere modification dans le formulaire.
moi j'aimerais supprimer tous les changements depuis l'ouverture du formulaire.
Je ne sais pas si c'est possible ?
pas possible, puisque la mise à jour est validée quand on passe à l'enregistrement suivant...
Dans ce cas, il faut que tu journalises ce que tu fais, afin de pouvoir le "rejouer" à l'envers...