OVH Cloud OVH Cloud

Effacer enregistrement dans une zone de liste

6 réponses
Avatar
defluc
J'ai une zone de liste dont la source de données est un Recordset.
Quand un enregistrement est sélectionné dans la zone de liste,
l'utilisateur a la possiblité dde l'effacer en appuyant sur la touche
"Del". Celle-ci active l'événement "Keydown" qui exécute l'intruction
"Delete" sur le Recordset.
Tout fonctionne tant que je me déplace dans la liste en cliquant sur des
enregistrements distincts. Mais, une fois un enregistrement effacé, si
je réappuie immédiatement sur "Del", l'instruction requery de la zone de
liste génère le message suivant :
"Erreur '2118'
Enregistrez le champs en cours avant d'exécuter l'action Actualiser.@"
et la zone de liste affiche un enregistrement dont chaque champs a pour
valeur "#Supprimé".
Ce problème ne se posant pas quand je me déplace dans la zone de liste,
j'ai essayé un "move" dans la table et un "close" de celle-ci avant le
"Requery" mais rien n'y change.

Merci de m'éclairer

6 réponses

Avatar
defluc
Voici ma source :
Private Sub TerrNonBatiList_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode <> vbKeyDelete Or TerrNonBatiList.ListCount = 0 Then Exit Sub
Dim Db As Database, Rst As Recordset
Dim Rang As Integer
Rang = TerrNonBatiList.ListIndex
RefCadListe.RowSource = ""
ProprioList.RowSource = ""
RefCadListe.Requery
ProprioList.Requery
RefCadStrClef = TerrNonBatiList.Column(14, Rang)
Set Db = CurrentDb
Set Rst = Db.OpenRecordset("TableBienNonBati")
Rst.MoveFirst
Rst.Index = "RefCadStrClef"
Rst.Seek "=", RefCadStrClef
Rst.Delete
Rst.Close
Db.Close
Set Db = Nothing
Set Rst = Nothing
TerrNonBatiList.Requery
If Rang = TerrNonBatiList.ListCount - 1 Then Rang = Rang - 1
TerrNonBatiList.Selected(Rang) = True
End Sub

Merci du suivi

Raymond a écrit:
Bonjour.

tu fais 2 fois Del sur le même enregistrement ?
Quelle fonction tu utilises pour supprimer l'enregistrement ?


Avatar
Raymond
Bonjour.

tu fais 2 fois Del sur le même enregistrement ?
Quelle fonction tu utilises pour supprimer l'enregistrement ?
--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"defluc" a écrit dans le message de
news:
J'ai une zone de liste dont la source de données est un Recordset.
Quand un enregistrement est sélectionné dans la zone de liste,
l'utilisateur a la possiblité dde l'effacer en appuyant sur la touche
"Del". Celle-ci active l'événement "Keydown" qui exécute l'intruction
"Delete" sur le Recordset.
Tout fonctionne tant que je me déplace dans la liste en cliquant sur des
enregistrements distincts. Mais, une fois un enregistrement effacé, si
je réappuie immédiatement sur "Del", l'instruction requery de la zone de
liste génère le message suivant :
"Erreur '2118'
Enregistrez le champs en cours avant d'exécuter l'action Actualiser.@"
et la zone de liste affiche un enregistrement dont chaque champs a pour
valeur "#Supprimé".
Ce problème ne se posant pas quand je me déplace dans la zone de liste,
j'ai essayé un "move" dans la table et un "close" de celle-ci avant le
"Requery" mais rien n'y change.

Merci de m'éclairer



Avatar
Raymond
Est-ce que tu as vu l'usine à gaz que tu as monté ?
tu vas chercher la colonne 15 d'une combobox pour supprimer un champ dans
une table qui n'a rien à voir avec ta combo, tu ne testes aucune condition
d'erreur sur le seek et tu t'étonnes du résultat ?
En aucun cas une suppression d'enregistrement ne doit intervenir sur
l'événement d'une combo. Une suppression doit être testée et demander une
confirmation par un msgbox à l'opérateur après affichage d'un minimum
d'éléments significatifs.

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


"defluc" a écrit dans le message de
news:
Voici ma source :
Private Sub TerrNonBatiList_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode <> vbKeyDelete Or TerrNonBatiList.ListCount = 0 Then Exit
Sub

Dim Db As Database, Rst As Recordset
Dim Rang As Integer
Rang = TerrNonBatiList.ListIndex
RefCadListe.RowSource = ""
ProprioList.RowSource = ""
RefCadListe.Requery
ProprioList.Requery
RefCadStrClef = TerrNonBatiList.Column(14, Rang)
Set Db = CurrentDb
Set Rst = Db.OpenRecordset("TableBienNonBati")
Rst.MoveFirst
Rst.Index = "RefCadStrClef"
Rst.Seek "=", RefCadStrClef
Rst.Delete
Rst.Close
Db.Close
Set Db = Nothing
Set Rst = Nothing
TerrNonBatiList.Requery
If Rang = TerrNonBatiList.ListCount - 1 Then Rang = Rang - 1
TerrNonBatiList.Selected(Rang) = True
End Sub


Avatar
defluc
Quelle sévérité. Je n'ai pas envoyé tout le contenu de la source pour ne
pas alourdir le message. Il est bien évident que la source de zone de
liste est bien la table dans laquelle l'enregistrement sera effacé après
une demande de confirmation.
Je récupère la clé de l'enregistrement sélectionné dans la zone de
liste, je demande confirmation, je me déplace sur l'enregistrement
correspondant dans la table, j'efface l'enregistrement et je remets la
liste à jour. Si ça c'est une usine à gaz où un marteau pour écraser une
mouche alors quelle est la roue à eau ?

Salut
Raymond a écrit:
Est-ce que tu as vu l'usine à gaz que tu as monté ?
tu vas chercher la colonne 15 d'une combobox pour supprimer un champ dans
une table qui n'a rien à voir avec ta combo, tu ne testes aucune condition
d'erreur sur le seek et tu t'étonnes du résultat ?
En aucun cas une suppression d'enregistrement ne doit intervenir sur
l'événement d'une combo. Une suppression doit être testée et demander une
confirmation par un msgbox à l'opérateur après affichage d'un minimum
d'éléments significatifs.



Avatar
Raymond
RE.

excuses-moi si je t'ai froissé, je ne le voulais en aucun cas.
je pensais que c'était le code réel.

vu qu'on n'a pas tout le code, il serait préférable de travailler
directement sur le formulaire, si tu peux me l'envoyer par mail avec des
tables presque vides, on irait plus vite.

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


"defluc" a écrit dans le message de
news:
Quelle sévérité. Je n'ai pas envoyé tout le contenu de la source pour ne
pas alourdir le message. Il est bien évident que la source de zone de
liste est bien la table dans laquelle l'enregistrement sera effacé après
une demande de confirmation.
Je récupère la clé de l'enregistrement sélectionné dans la zone de
liste, je demande confirmation, je me déplace sur l'enregistrement
correspondant dans la table, j'efface l'enregistrement et je remets la
liste à jour. Si ça c'est une usine à gaz où un marteau pour écraser une
mouche alors quelle est la roue à eau ?




Avatar
defluc
Merci

Je vais essayer de faire une copie la plus dépouillée possible mais cela
va me prendre du temps pour vérifier la cohérence. La base compactée
fait 16Mb une dizaine de tables, plusieurs formulaires et états. Je vais
tenter une version allégée ne comportant que le formulaire concerné
mais cela va me prendre un certain temps, comme le fut du canon, et je
n'ai pas que cela à faire.

A bientôt

Raymond a écrit:
RE.

excuses-moi si je t'ai froissé, je ne le voulais en aucun cas.
je pensais que c'était le code réel.

vu qu'on n'a pas tout le code, il serait préférable de travailler
directement sur le formulaire, si tu peux me l'envoyer par mail avec des
tables presque vides, on irait plus vite.