OVH Cloud OVH Cloud

Signet Non valide

5 réponses
Avatar
Alain TEYSSEDRE
Bonjour

J'ai essayé d'utiliser la propriété Bookmark mais j'ai un message d'erreur:
Signet non valide

en fait j'ai un bouton de commande qui me permet d'effacer un enregistrement
ce que je souhaite c'est me retrouver positionné sur l'enregistrement
précedant
celui que je viens d'effacer (et pas sur le 1er enregistrement de mon
formulaire)

Voici le code à incriminer:

Dim Book As Variant

Book = Me.Bookmark
DoCmd.RunSQL "DELETE * FROM matable ........." _
Me.Requery
Me.Bookmark = Book
DoCmd.GoToRecord , , acPrevious

ou est l'erreur ?

merci pour votre aide
Alain

5 réponses

Avatar
Raymond [mvp]
Bonsoir.

delete * supprime tous les enregistrements, j'espère qu'il y a une clause
where ?
le boomark n'a plus de valeur car l'enregistrement n'existe plus, il faut
d'abord se positionner sur le précédent , mémoriser le bookmark, supprimer
et recharger l'ancienne valeur.
pourquoi passer par une requête au lieu de supprimer directement
l'enregistrement par DoCmd.RunCommand acCmdDeleteRecord et tu n'auras même à
t'occuper du bookmark.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"Alain TEYSSEDRE" a écrit dans le
message de news:OzBV%
Bonjour

J'ai essayé d'utiliser la propriété Bookmark mais j'ai un message
d'erreur:

Signet non valide

en fait j'ai un bouton de commande qui me permet d'effacer un
enregistrement

ce que je souhaite c'est me retrouver positionné sur l'enregistrement
précedant
celui que je viens d'effacer (et pas sur le 1er enregistrement de mon
formulaire)

Voici le code à incriminer:

Dim Book As Variant

Book = Me.Bookmark
DoCmd.RunSQL "DELETE * FROM matable ........." _
Me.Requery
Me.Bookmark = Book
DoCmd.GoToRecord , , acPrevious

ou est l'erreur ?

merci pour votre aide
Alain




Avatar
3stone
Salut,

"Alain TEYSSEDRE"
J'ai essayé d'utiliser la propriété Bookmark mais j'ai un message d'erreur:
Signet non valide

en fait j'ai un bouton de commande qui me permet d'effacer un enregistrement
ce que je souhaite c'est me retrouver positionné sur l'enregistrement
précedant
celui que je viens d'effacer (et pas sur le 1er enregistrement de mon
formulaire)



On Error Resume Next
DoCmd.RunCommand acCmdDeleteRecord

With Me.RecordsetClone
.Bookmark = Me.Bookmark
.MovePrevious
Me.Bookmark = .Bookmark
End With



--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/charte.htm
--------------------------------------

Avatar
Alain TEYSSEDRE
Bonjour Raymond

désolé mais j'ai du m'absenter, je reprends le fil ...


delete * supprime tous les enregistrements, j'espère qu'il y a une clause
where ?


===> affirmatif

le boomark n'a plus de valeur car l'enregistrement n'existe plus, il faut
d'abord se positionner sur le précédent , mémoriser le bookmark, supprimer
et recharger l'ancienne valeur.


==> Oui mais le pb c'est lorsque je suis sur le 1er enregistrement du
formulaire
(qui n'est pas forcemment le 1er enregistrement de la table)
En plus je suis obligé de faire 2 requery (cf ci dessous) et ça
fait que je me retrouve
sur le 1 ere enregsitrement du formulaire malgré l'utilisation du
bookmark

J'ai fait ça mais ça ne va pas:

DoCmd.SetWarnings False
Dim Book As Variant
On Error Resume Next

DoCmd.GoToRecord , , acPrevious
Book = Me.Bookmark
DoCmd.GoToRecord , , acNext

DoCmd.RunSQL "DELETE * FROM [Matable] " _
& "WHERE [Matable].[Champ1] = " _
& Me.txt1

DoCmd.SetWarnings True
Me.Liste149.Requery
Me.Requery
Me.Bookmark = Book



pourquoi passer par une requête au lieu de supprimer directement
l'enregistrement par DoCmd.RunCommand acCmdDeleteRecord et tu n'auras même
à

t'occuper du bookmark.



==> C'est vrai mais j'ai un bout de code (type usine à gaz encore
une fois) qui ne suppporte
pas le DoCmd.RunCommand acCmdDeleteRecord alors je fais
avec le SQL Delete ...


@+
Alain

Avatar
Raymond [mvp]
Bonsoir.

Il faut que tu rajoutes des tests pour savoir si tu es sur le premier
enregistrement ou même sur un nouvel enregistrement. et selon le résultat tu
te positionnes en amont ou en aval de l'enregistrement actif et tu gardes la
valeur du bookmark pour le retour après suppression.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"Alain TEYSSEDRE" a écrit dans le
message de news:%
Bonjour Raymond

désolé mais j'ai du m'absenter, je reprends le fil ...


delete * supprime tous les enregistrements, j'espère qu'il y a une
clause


where ?


===> affirmatif

le boomark n'a plus de valeur car l'enregistrement n'existe plus, il
faut


d'abord se positionner sur le précédent , mémoriser le bookmark,
supprimer


et recharger l'ancienne valeur.


==> Oui mais le pb c'est lorsque je suis sur le 1er enregistrement du
formulaire
(qui n'est pas forcemment le 1er enregistrement de la table)
En plus je suis obligé de faire 2 requery (cf ci dessous) et ça
fait que je me retrouve
sur le 1 ere enregsitrement du formulaire malgré l'utilisation
du

bookmark

J'ai fait ça mais ça ne va pas:

DoCmd.SetWarnings False
Dim Book As Variant
On Error Resume Next

DoCmd.GoToRecord , , acPrevious
Book = Me.Bookmark
DoCmd.GoToRecord , , acNext

DoCmd.RunSQL "DELETE * FROM [Matable] " _
& "WHERE [Matable].[Champ1] = " _
& Me.txt1

DoCmd.SetWarnings True
Me.Liste149.Requery
Me.Requery
Me.Bookmark = Book



pourquoi passer par une requête au lieu de supprimer directement
l'enregistrement par DoCmd.RunCommand acCmdDeleteRecord et tu n'auras
même


à
t'occuper du bookmark.



==> C'est vrai mais j'ai un bout de code (type usine à gaz encore
une fois) qui ne suppporte
pas le DoCmd.RunCommand acCmdDeleteRecord alors je fais
avec le SQL Delete ...


@+
Alain






Avatar
Alain TEYSSEDRE
Bonjour Pierre et Raymond

merci à vous deux en conbinant vos conseils ça marche

@+
Alain



"Raymond [mvp]" a écrit dans le message de
news:%
Bonsoir.

Il faut que tu rajoutes des tests pour savoir si tu es sur le premier
enregistrement ou même sur un nouvel enregistrement. et selon le résultat
tu

te positionnes en amont ou en aval de l'enregistrement actif et tu gardes
la

valeur du bookmark pour le retour après suppression.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"Alain TEYSSEDRE" a écrit dans le
message de news:%
Bonjour Raymond

désolé mais j'ai du m'absenter, je reprends le fil ...


delete * supprime tous les enregistrements, j'espère qu'il y a une
clause


where ?


===> affirmatif

le boomark n'a plus de valeur car l'enregistrement n'existe plus, il
faut


d'abord se positionner sur le précédent , mémoriser le bookmark,
supprimer


et recharger l'ancienne valeur.


==> Oui mais le pb c'est lorsque je suis sur le 1er enregistrement
du


formulaire
(qui n'est pas forcemment le 1er enregistrement de la table)
En plus je suis obligé de faire 2 requery (cf ci dessous) et
ça


fait que je me retrouve
sur le 1 ere enregsitrement du formulaire malgré
l'utilisation


du
bookmark

J'ai fait ça mais ça ne va pas:

DoCmd.SetWarnings False
Dim Book As Variant
On Error Resume Next

DoCmd.GoToRecord , , acPrevious
Book = Me.Bookmark
DoCmd.GoToRecord , , acNext

DoCmd.RunSQL "DELETE * FROM [Matable] " _
& "WHERE [Matable].[Champ1] = " _
& Me.txt1

DoCmd.SetWarnings True
Me.Liste149.Requery
Me.Requery
Me.Bookmark = Book



pourquoi passer par une requête au lieu de supprimer directement
l'enregistrement par DoCmd.RunCommand acCmdDeleteRecord et tu n'auras
même


à
t'occuper du bookmark.



==> C'est vrai mais j'ai un bout de code (type usine à gaz
encore


une fois) qui ne suppporte
pas le DoCmd.RunCommand acCmdDeleteRecord alors je fais
avec le SQL Delete ...


@+
Alain