OVH Cloud OVH Cloud

Annuler les modifications faites sur un formulaire

4 réponses
Avatar
Stéphane
Bonjour,

Je suis tout nouveau dans le monde ACCESS et je cherche,=20
en vain, le moyen de d'annuler ou confirmer les=20
modifications faites par l'utilisateur lorsque ce dernier=20
ferme une forme qui est associ=E9e =E0 l'ensemble des champs=20
d'une table.

N'est-il pas possible de modifier le comportement par=20
d=E9faut qui consiste =E0 mettre =E0 jour les modifications=20
faites sur un enregistrement d=E8s lors que l'on en=20
s=E9lectionne un autre ?

Je n'arrive pas =E0 utiliser le m=E9canisme de d=E9but de=20
transaction puis de "commit" et "rollback" que j'essaye de=20
mettre en oeuvre en utilisant la connexion du projet=20
courant (CurrentProject.Connexion) ; ce m=E9canisme peut-il=20
=EAtre utilis=E9 pour les modifications faites =E0 partir du=20
recordset associ=E9 =E0 une form ?

Merci de vos r=E9ponses=20

4 réponses

Avatar
3stone
Salut,

"Stéphane"
Je suis tout nouveau dans le monde ACCESS et je cherche,
en vain, le moyen de d'annuler ou confirmer les
modifications faites par l'utilisateur lorsque ce dernier
ferme une forme qui est associée à l'ensemble des champs
d'une table.

N'est-il pas possible de modifier le comportement par
défaut qui consiste à mettre à jour les modifications
faites sur un enregistrement dès lors que l'on en
sélectionne un autre ?



En demandant, par l'événement "Avant mise à jour" du formulaire, tout simplement.

If Msgbox("Voulez-vous enregistrer les modifications ?",vbYesNo,"Sauver") = vbNo Then
Cancel = true
Me.Undo ' éventuellement annuller la saisie
End if



--
A+
Pierre (3stone) Access MVP
-----------------------------
http://users.skynet.be/mpfa
-----------------------------
Avatar
Stéphane
Merci pour la réponse.

Un petit problème cependant, cet évènement arrive à chaque
modification d'enregistrement et je voudrais poser cette
question une seule fois, lors de la fermeture du
formulaire.

Pour info en fouillant dans ces newsgroup j'ai trouvé des
info concernant les transactions et ci-dessous le code
permettant de déclarer une transaction sur le formulaire
courant (à placer dans le Form_Load par ex.) :
....
Dim rst as DAO.Recordset
Dim xdb as Database
Set WrkSp = DBEngine.CreateWorkspace(Me.Name, "Admin",
vbNullString)
Set xdb = WrkSp.OpenDatabase(CurrentDb.Name)
WrkSp.BeginTrans
Set rst = xdb.OpenRecordset(Me.RecordSource,
dbOpenDynaset)
Set Me.Recordset = rst
Set rst = Nothing
Set xdb = Nothing
....

Où l'objet WrkSp et un objet du formulaire
("Dim WrkSp as Workspace)

Par la suite (dans le Form_Close par ex.) l'appel à
"WrkSp.Rollback" annule les modifications et celui
à "WrkSp.CommitTrans" les confirme.

-----Message d'origine-----
Salut,

"Stéphane"
Je suis tout nouveau dans le monde ACCESS et je cherche,
en vain, le moyen de d'annuler ou confirmer les
modifications faites par l'utilisateur lorsque ce dernier
ferme une forme qui est associée à l'ensemble des champs
d'une table.

N'est-il pas possible de modifier le comportement par
défaut qui consiste à mettre à jour les modifications
faites sur un enregistrement dès lors que l'on en
sélectionne un autre ?



En demandant, par l'événement "Avant mise à jour" du
formulaire, tout simplement.


If Msgbox("Voulez-vous enregistrer les
modifications ?",vbYesNo,"Sauver") = vbNo Then

Cancel = true
Me.Undo ' éventuellement annuller la saisie
End if



--
A+
Pierre (3stone) Access MVP
-----------------------------
http://users.skynet.be/mpfa
-----------------------------




.



Avatar
3stone
re,

"Stéphane"
Un petit problème cependant, cet évènement arrive à chaque
modification d'enregistrement et je voudrais poser cette
question une seule fois, lors de la fermeture du
formulaire.



Oui ;-)

Et si, après avoir modifier, volontairement ou involontairement
quelques dizaines d'enregistrements, on pose la question...

comment savoir ?

;-)


--
A+
Pierre (3stone) Access MVP
-----------------------------
http://users.skynet.be/mpfa
-----------------------------
Avatar
phil
Pour pouvoir demander la confirmation des modifications
effectuées sur la totalité des enregistrements, il faut
obligatoirement passer par du code VBA un peu musclé...

Il faut, à l'ouverture du formulaire, créer un tableau
(variable) qui regroupe les données de ta table.
Ton formulaire sera alors basé sur ce tableau, non sur la
table, ce qui signifie qu'il faut que toutes les zones de
textes soient "indépendantes", et qu'il faut gérer
manuellement toutes les initialisations et mises à jour de
leurs données.
Une modification d'une zone de texte ne modifie pas ta
table, mais met à jour ton tableau.
Et lorsque l'on quitte le formulaire, il faut, si on
accepte les modifications, mettre à jour la table à partir
du tableau (variable).

En un mot, c'est difficile à mettre en oeuvre. Alors si tu
n'est pas très à l'aise avec le VBA et les formulaires
indépendants (qui ne sont pas basés sur des tables ou
requêtes), oublie ton idée de validation de masse.



-----Message d'origine-----
Bonjour,

Je suis tout nouveau dans le monde ACCESS et je cherche,
en vain, le moyen de d'annuler ou confirmer les
modifications faites par l'utilisateur lorsque ce dernier
ferme une forme qui est associée à l'ensemble des champs
d'une table.

N'est-il pas possible de modifier le comportement par
défaut qui consiste à mettre à jour les modifications
faites sur un enregistrement dès lors que l'on en
sélectionne un autre ?

Je n'arrive pas à utiliser le mécanisme de début de
transaction puis de "commit" et "rollback" que j'essaye
de

mettre en oeuvre en utilisant la connexion du projet
courant (CurrentProject.Connexion) ; ce mécanisme peut-il
être utilisé pour les modifications faites à partir du
recordset associé à une form ?

Merci de vos réponses


.