[Catégorie modifiée VB6 --> VBA] VBA supprimer enregistrement

Profil bloqué - 11 juin 2010 à 10:12
 Profil bloqué - 14 juin 2010 à 09:08
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

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0
Profil bloqué
11 juin 2010 à 11:53
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 ?
0
Profil bloqué
11 juin 2010 à 11:54
Ops, désolé, mais merci de ta réponse ^^
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
11 juin 2010 à 15:46
Le Update devrait fonctionner.

Autant pour moi, le .Execute, c'est sous ADODB.
Je crois que sous DAO, il faut jouer avec Command ou un truc comme ça.

Regarde voir dans un code du site qui parle de DAO ou de DB : il y a surement un exemple qqpart.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Profil bloqué
14 juin 2010 à 09:08
Heu ben enfaite avec le Update, rien ne change j'ai toujours le même message.
J'ai donc essayé ca :
Case vbYes
               Dim sql As String
            
            
                sql = "DELETE * FROM dbo_password "
                sql sql & " WHERE (((nom_user) """ & login & """)) "
                CurrentDb.OpenRecordset (sql)


Mais j'obtiens alors : Opération non valide... (Je précise que login = nom_user, ce dernier étant un champs de mon formulaire. Voila voila...
0
Rejoignez-nous