Bonjour alors voila j'ai ce script qui sert à effacer un enregistrement sélectionné dans un formulaire. Cette enregistrement est dans une table lié de SQL Server 2005. A part effacer je n'est aucun autre soucie, j'ai donc du mal a voir le problème :
J'ai placé des MsgBox un peu partout pour voir ou mon code bloque et il semble s'arrêter au niveau du rs4.Close en m'affichant le message suivant : " le moteur de base de données Microsoft Office Access a arrêté le traitement parce que vous et un autre utilisateur tentez de modifier les mêmes données en même temps " je tiens à préciser que je suis le seul connecté sur ma base et ce j'en suis sur...
Private Sub supprimer_Click()
On Error GoTo Err_supprimer_Click
'récupération du login de l'utilisateur
Dim login As String
login = Me.nom_user
'variable stockant la réponse donnée dans la boite de dialogue
Dim intReponse As Integer
'message pour l'utilisateur
intReponse = MsgBox("Etes-vous sûr de vouloir supprimer l'utilisateur : " & login & " ? ", vbYesNoCancel, "Confirmation")
Select Case intReponse
Case vbYes
Dim rs4 As DAO.Recordset
MsgBox ("mllqf")
Set db = CurrentDb()
Set rs4 = db.OpenRecordset("dbo_password", dbOpenDynaset, dbSeeChanges)
While Not rs4.EOF
MsgBox ("mllqf")
rs4.Edit
If (rs4!nom_user = login) Then
rs4.Delete
End If
MsgBox ("mllqf")
rs4.MoveNext
Wend
MsgBox ("mllqf")
rs4.Close
MsgBox ("mllqf")
Case vbNo
' non est choisit donc on annule les modification
Me.Undo
Case vbCancel
' Annuler est choisit donc on annule la manipulation
Cancel = True
End Select
'rafraichissement du formulaire pour apercevoir les changements
Me.Requery
Me.Refresh
Exit_supprimer_Click:
Exit Sub
Err_supprimer_Click:
MsgBox Err.Description
Resume Exit_supprimer_Click
End Sub
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 11 juin 2010 à 11:40
Salut
Merci de bien choisir ta catégorie de question.
Ton code supprime l'enregistrement dans ton RecordSet rs4, mais pas dans ta base.
Comme expliqué clairement dans la doc du RecordSet :
[i]Attention Les modifications apportées à l'enregistrement actuel sont perdues si :
- ...
- vous fermez le jeu d'enregistrements désigné par recordset sans utiliser préalablement Update /i
De plus, il faudrait regarder ce qui se passe quand tu supprime (.Delete) un enregistrement de ton RecordSet : Que devient le pointeur ?
Passe t-il sur l'enregistrement précédent ou le suivant ?
S'il passe sur le suivant automatiquement, le fait de faire un .MoveNext derrière un .Delete te fera sauter la lecture d'un enregistrement !
Pourquoi ne pas faire une requète de suppression directe dans la table ?
Exemple à approfondir :
db.Execute "Delete * From maTable Where monChamp = '" & maTextBox.Text & "'"
PS : On le dit à longueur de temps : DAO est obsolète - à éviter car certaines fonctionnalités ne fonctionnent pas. --> ADODB
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Ben enfaite, je modifie une application access deja existante, elle fait plus de 11022 lignes, j'avais pas envie de tout modifier... Et heu alors si j'ai bien compris y faudrais que je je fasse un Rs4.Update avant de la close, seulement ca marche toujours pas. Bref en fessant la requête j'ai un soucie enfin je déclenche ou ce db.execute ?