Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/11/2011, 12h23   #1
Membre du Club
 
beauchat symba
Inscription : janvier 2010
Messages : 95
Détails du profil
Informations personnelles :
Nom : beauchat symba

Informations forums :
Inscription : janvier 2010
Messages : 95
Points : 50
Points : 50
Par défaut Parcourir un RecordSet et supprimer certains Enregistrements

Bonjour à Tous

Je veux supprimer tous les Enregistrements de mon Recordset qui remplissent une condition
Voici mon Code mais j'ai toujours une err.3070 le moteur Access ne reconnait
Pas <<Vrai>> en tant que Nom de Champ ou d'expression correcte


Bon ça devrait être possible en passant par une Requête Mise à Jour mais j'ai déjà mon jeu d'Enregistrements...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Private Sub Form_AfterUpdate()
    Dim rstClone As DAO.Recordset
    Set rstClone = Me.RecordsetClone
 
        If rstClone.RecordCount = 0 Then
            'ne Rien Faire
        Else
          Do
'*********************** ici la ligne jaune fatale ************************ 
            rstClone.FindFirst (Not IsNull(MotifAbsence) And IsNull(DateFinAbsence))
                    If rstClone.NoMatch Then
                        Exit Do
                    Else
                        rstClone.Delete
                    End If
         Loop
 
            Me.Recordset = rstClone
            Me.Requery
        End If
   '======= Libération ======
   rstClone.Close
   Set rstClone = Nothing
 
End Sub
Un WHILE fait pas mieux alors je vois pas
Vos idées sont bien venues !
Bien cordialement
symbabeauchat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 12h41   #2
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

L'argument de FindFirst est une chaîne de caractères.
C'est ce qu'on voit dans l'explorateur d'objets :
Citation:
Sub FindFirst(Criteria As String)
Essaie ainsi :
Code :
            rstClone.FindFirst "(Not IsNull(MotifAbsence) And IsNull(DateFinAbsence))"
MotifAbsence et DateFinAbsence doivent être des champs de la source de données du recordset.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 14h02   #3
Membre du Club
 
beauchat symba
Inscription : janvier 2010
Messages : 95
Détails du profil
Informations personnelles :
Nom : beauchat symba

Informations forums :
Inscription : janvier 2010
Messages : 95
Points : 50
Points : 50
Par défaut Impossible de remplacer le Recorset par son Clone

Merci LedZeppII

Citation:
L'argument de FindFirst est une chaîne de caractères
et non des Champs ! comme j'avais fait

ta proposition marche Top
Code :
rstClone.FindFirst "(Not IsNull(MotifAbsence) And IsNull(DateFinAbsence))"
Je ne marque pas résolu car un peu plus loin dans mon code j'ai un autre souci
Code :
Me.Recordset = rstClone
c'est à dire quand je veux réaffecter le clone que je viens de mettre à jour
j'ai l'err3251: Opération non autorisée pour ce type d'Objet !

Bon je fais
Code :
set Me.Recordset = rstClone
et là Err.3420 l'objet est incorrect ou n'est plus défini

Je supprime
Code :
'Me.Recordset = rstClone
Et là tout beigne

Ce qui me gêne c'est que je croyais travailler sur un clone ,faire mes modifs, puis réaffecter ce clone à la place du recorset pour mettre à jour et voir mes modifs. Les faits semblent démentir mon raisonnement
Si tu peux m'éclairer ça serait bien

Merci encore LedZeppII
symbabeauchat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 15h28   #4
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

A priori, il semble qu'il ne soit pas autorisé d'affecter au formulaire, le RecordsetClone du formulaire.
Cette ligne ...
Code :
    Set rstClone = Me.RecordsetClone
... ne crée pas un nouveau recordset.
Tu initialise juste une variable objet de type recordset qui pointe sur un recordset existant (déjà créé par le formulaire).

J'ai fait l'essai avec un nouveau recordset basé sur la même source que le formulaire, et ça fonctionne.

Ceci dit, en manipulant les données de Me.RecordsetClone via la variable objet rstClone, tu manipules les données du formulaire.
Tu n'as donc pas besoin de cette ligne :
Code :
set Me.Recordset = rstClone
A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/11/2011, 17h09   #5
Membre du Club
 
beauchat symba
Inscription : janvier 2010
Messages : 95
Détails du profil
Informations personnelles :
Nom : beauchat symba

Informations forums :
Inscription : janvier 2010
Messages : 95
Points : 50
Points : 50
Conclusion

Citation:
Ceci dit, en manipulant les données de Me.RecordsetClone via la variable objet rstClone, tu manipules les données du formulaire.
Tu n'as donc pas besoin de cette ligne :
Ce qui explique que mon code a bien fonctionné quand j'ai fait l'essai en supprimant cette ligne !

Merci encore LedZeppII pour ton explication

Bonne soirée
symbabeauchat est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h56.


 
 
 
 
Partenaires

Hébergement Web