Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Undo

24 views
Skip to first unread message

Jean-Pierre

unread,
Jun 30, 2003, 5:13:12 AM6/30/03
to
Bonjour,

Windows 2000 Pro/Access 2000

Soit un formulaire dont la source est une requête listant
les enregistrements d'une table.
Ce formulaire permet de renseigner des noms de personnes
les uns après les autres :

Dupont
Martin
Durand
etc...

Dans le cas où l'on a supprimé malencontreusement une
ligne (même après un message de confirmation), peut-on
utiliser la méthode "Undo" pour annuler la suppression ?
Si non, existe-t-il un moyen (simple) d'annuler la
dernière opération effectuée sachant que dans ce type de
formulaire je crois que la table est mise à jour au fur et
à mesure des saisies et diverses opérations ?


Merci beaucoup par avance.

JPG

Michel Walsh

unread,
Jun 30, 2003, 7:29:42 AM6/30/03
to
Salut,


Avec un formulaire (sous formulaire) lié, Access démarre une transaction implicite qui n'est
pas sous le contrôle de DAO. Par contre, depuis Access 2000, il est possible de bidouiller quelque
chose. Le scénario est le suivant: permettre à l'utilisateur de modifier un ou plusieurs
enregistrements, d'en ajouter, d'en affacer et, après mure réflexion, décider de ne pas vouloir
tous ces changements, qu'il vient d'apporter (depuis l'ouverture du formulaire lié).

C'est toujours la même chose, avec un transaction, il nous faut un workspace. Dans le code qui
suit, je répète que cela ne fonctionne que sous 2000 et plus récent, le code est sous un
formulaire. Le formulaire, en vue continue ou autre, possède deux boutons, en pied de formulaire,
Commit et RollBack. De plus, en mode design, fournir le nom de la table liée au formulaire dans la
propriété RecordSource.


On remarque qu'il y a peu de code, il n'en faut pas beaucoup, en effet.

En chargement du formulaire, on démarre une transaction sur un nouveau ws, et on crée un
recordset sur ce que désire le formulaire (on s'informe auprès de Me.RecordSource). La ligne
importante est:

Set Me.Recordset= rst

ce qui débarque le formulaire de son mode pépère et le lie à NOTRE transaction (via notre
recordset sur notre db sur notre ws ). Le formulaire est alors à notre merci: toutes les
modifications apportées depuis ce moment, sur ce formulaire, peuvent être "annulées" (remise à ce
que c'était lors de l'ouverture), que l'utilisateur ait apporté une ou deux cents
modifications/effaçage/ajouts, ou commises (cas standard).


La variable booléenne done permet de faire un commit ( on peut modifier pour un rollback,
voir Sub Form_Close ) si l'utilisateur ferme le formulaire, sans passer par un des deux boutons
"commit" ou "rollback".

====================
Option Compare Database
Option Explicit

Private ws As Workspace
Private xdb As Database
Private rst As DAO.Recordset
Private done As Boolean

Private Sub Form_Load()
Set ws = DBEngine.CreateWorkspace("myws", "Admin", vbNullString)
Set xdb = ws.OpenDatabase(CurrentDb.Name)
ws.BeginTrans
Set rst = xdb.OpenRecordset(Me.RecordSource, dbOpenDynaset)
Set Me.Recordset = rst
done = False

End Sub

Private Sub Commit_Click()
ws.CommitTrans
done = True
DoCmd.Close acForm, Me.Name
End Sub

Private Sub Form_Close()
If Not done Then ws.CommitTrans
End Sub

Private Sub Rollback_Click()
ws.Rollback
done = True
DoCmd.Close acForm, Me.Name
End Sub

==================

Espérant le tout utile,
Vanderghast, Access MVP


"Jean-Pierre" <jean-pi...@wanadoo.fr> wrote in message
news:074f01c33ee7$d4ade700$a101...@phx.gbl...

Jean-Pierre

unread,
Jun 30, 2003, 7:44:34 AM6/30/03
to
J'ai eu peur un instant que ma question soit ridicule mais
vu la réponse (rapide et très claire), je pense que cela
pourra intéresser d'autres personnes.

Je teste de ce pas.

Merci infiniment.

JPG

>-----Message d'origine-----

>.
>

Jean-Pierre

unread,
Jun 30, 2003, 8:49:14 AM6/30/03
to
Ca marche parfaitement.

Juste un petit plantage sur le Form_Close ... Je cherche
le pourquoi.


Merci encore.

JPG

>-----Message d'origine-----

>.
>

Bruno

unread,
Jun 30, 2003, 9:32:57 AM6/30/03
to
Tu as raison, bravo à Michel,
Je confirme le grand intéret de son post.
@+ Bruno

"Jean-Pierre" <jean-pi...@wanadoo.fr> a écrit dans le message de news:
07ae01c33efc$f9ee71a0$a301...@phx.gbl...

0 new messages