Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
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 18/01/2011, 14h39   #1
Candidat au titre de Membre du Club
 
Gabriel Freitas
Inscription : décembre 2010
Messages : 30
Détails du profil
Informations personnelles :
Nom : Gabriel Freitas

Informations forums :
Inscription : décembre 2010
Messages : 30
Points : 12
Points : 12
Par défaut Compte d'enregistrements fitrés dans un recordset

Bonjour.

C'est encore moi Je rapelle donc que je suis étudiant en informatique et que je travaille sur une base de données permettant la gestion du différent matériels informatique entre les salles de classes.

Mon problème concerne l'emprunt d'objet. Lorsqu'un utilisateur souhaite emprunter un objet, j'applique un filtre sur ma table des emprunts (historique des objets empruntés, en cours d'emprunts, ou réservés).

En temps normal, le filtre doit s'appliques sur les dates de retour des objets qui sont future à "l'instant présent".

Cependant, pour tester je me limite à compter simplement le nombre de fois que l'objet apparaît dans la table sans tenir compte de quoi que ce soit d'autre.

Malgré l'aplication d'un filtre, lorsque j'utilise la propriété RecordCount de mon RecordSet, il me retourne le nombre total d'enregistrements dans mon RecordSet et non le nombre d'éléments filtrés (ce qui n'est naturellement pas ce que je souhaite).

Voici le code que j'utilise
Code :
1
2
3
4
5
6
7
8
9
10
 
    Dim Rst As DAO.Recordset
    Dim Db As DAO.Database
 
    Set Db = CurrentDb()
    Set Rst = Db.OpenRecordset("tblEmprunt", dbOpenDynaset)
 
    Rst.Filter = "fkObjet LIKE '" & iNumObjet & "'"
    Rst.MoveLast
    MsgBox (Me.RecordsetClone.RecordCount)
iNumObjet est une variable ed module contenant la référence de l'objet
J'ai essayé sans le Rst.MoveLast, j'ai également tenté avec un Rst.Update

Mais rien n'y fait.

Connaitriez vous le moyen de ne compter que les enregistrement correspondant au filtre ?
Gibra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 14h57   #2
Membre régulier
 
Homme Michaël
Développeur .NET
Inscription : avril 2008
Messages : 80
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 30
Localisation : Belgique

Informations professionnelles :
Activité : Développeur .NET
Secteur : Transports

Informations forums :
Inscription : avril 2008
Messages : 80
Points : 84
Points : 84
Bonjour,

tu peux peut être utiliser ceci:

Code :
Set Rst = Db.OpenRecordset("SELECT Count(fkObjet) As NbrObj FROM tblEmprunt WHERE fkObjet LIKE '" & iNumObjet & "') GROUP BY fkObjet;")
mkl238 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 15h08   #3
Membre Expert
 
Avatar de keita
 
Homme
Inscription : novembre 2002
Messages : 879
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Côte d'Ivoire

Informations forums :
Inscription : novembre 2002
Messages : 879
Points : 1 015
Points : 1 015
Envoyer un message via MSN à keita
bonjour
Et si on remplaçait le LIKE comme ceci:
Code :
1
2
 
Rst.Filter = "fkObjet ='" & iNumObjet & "'"
Es tu sûr d'avoir bien initialisé iNumObjet ?

@+
keita est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 15h28   #4
Candidat au titre de Membre du Club
 
Gabriel Freitas
Inscription : décembre 2010
Messages : 30
Détails du profil
Informations personnelles :
Nom : Gabriel Freitas

Informations forums :
Inscription : décembre 2010
Messages : 30
Points : 12
Points : 12
J'ai essayé vos propositions et vous remercie de votre aide. J'ai même essayé de mixer vos propositions (avec le signe = donc) mais rien ne change.

Le symptote de la méthode de mkl238 est que la variable NbrObj qui est crée dans le "OpenRecordset" reste vide.

Le signe = proposé par keita ne change rien, excepté qu'il lève une erreur s'il est mis dans la propostion de mkl238.

@Keita, iNumObj (i pour Integer) est une variable sûre, testée et retestée

Merci de votre aide

[EDIT] En rapellant que j'utilisais un entier, j'ai réalisé que j'utilsais des apostrophes pour tester une valeur numérique. Malgré la supression de celle ci, le filtre ne fonctionne pas mieux qu'au préalable (a nouveau testé en y appliquant vos propositions)

Ligne de code modifiée
Code :
Rst.Filter = "fkObjet = " & iNumObjet
Gibra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 15h36   #5
Membre Expert
 
Avatar de keita
 
Homme
Inscription : novembre 2002
Messages : 879
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Côte d'Ivoire

Informations forums :
Inscription : novembre 2002
Messages : 879
Points : 1 015
Points : 1 015
Envoyer un message via MSN à keita
bonjour
ton code:
Code :
Set Rst = Db.OpenRecordset("tblEmprunt", dbOpenDynaset)
Peux tu me dire ce que represente tblEmprunt stp?
si c'est le nom d'une table alors essaie comme ceci:
Code :
1
2
3
4
5
6
7
8
9
10
 
    Dim Rst As DAO.Recordset, StrSQL as string
    StrSQL ="SELECT tblEmprunt.* WHERE fkObjet = " & iNumObjet & ";"
    Set Rst = CurrentDb.OpenRecordset(StrSQL, dbOpenDynaset)
    If Rst.Recordcount > 0 then
        Rst.MoveLast
        MsgBox (Rst.RecordCount)
   end if
   Rst.Close
   Set Rst=Nothing
@+
keita est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/01/2011, 15h48   #6
Candidat au titre de Membre du Club
 
Gabriel Freitas
Inscription : décembre 2010
Messages : 30
Détails du profil
Informations personnelles :
Nom : Gabriel Freitas

Informations forums :
Inscription : décembre 2010
Messages : 30
Points : 12
Points : 12
tblEmprunt est une table qui permet affiche la totalité des emprunts fait par les utilisateurs, qu'il soient passés, en cours d'emprunt, ou réservé dans une date future.

Je pratique donc ces tests afin de pouvoir mettre en place le code qui me permettra d'éviter le chevauchement d'emprunts pour un même objet.

Voici la description de la table et un exemple de contenu (beaucoup de clés étrangère mais la description devrait être compréhensible)

Les périodes sont des périodes d'heures de cours
Les classes sont des salles de classe
Le Oui/Non rendu indique si l'utilisateur à rendu ou non l'objet
Images attachées
Type de fichier : jpg GestionMastosCPLN.JPG (71,6 Ko, 6 affichages)
Gibra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 15h56   #7
Membre régulier
 
Homme Michaël
Développeur .NET
Inscription : avril 2008
Messages : 80
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 30
Localisation : Belgique

Informations professionnelles :
Activité : Développeur .NET
Secteur : Transports

Informations forums :
Inscription : avril 2008
Messages : 80
Points : 84
Points : 84
et ma solution en tenant compte que iNumObjet est un nombre ne fonctionne pas?
Code :
1
2
 
Set Rst = Db.OpenRecordset("SELECT Count(fkObjet) As NbrObj FROM tblEmprunt WHERE fkObjet = " & iNumObjet & " GROUP BY fkObjet;")
Rst!NbrObj est toujours = 0?
mkl238 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 15h58   #8
Membre Expert
 
Avatar de keita
 
Homme
Inscription : novembre 2002
Messages : 879
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Côte d'Ivoire

Informations forums :
Inscription : novembre 2002
Messages : 879
Points : 1 015
Points : 1 015
Envoyer un message via MSN à keita
J'ai réédité mon message; tu peux revenir la dessus?
@+
keita est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 16h11   #9
Candidat au titre de Membre du Club
 
Gabriel Freitas
Inscription : décembre 2010
Messages : 30
Détails du profil
Informations personnelles :
Nom : Gabriel Freitas

Informations forums :
Inscription : décembre 2010
Messages : 30
Points : 12
Points : 12
@mkl238 : Oui, mais la variable ne valait pas 0, elle était vide (null). et c'est toujours le cas.

@Keita. Merci pour ton bout de code, il ne fonctionne pas avec "tblEmprunt.*" mais très bien avec "* FROM tblEmprunt". Mais aurais-tu des explications sur le pourquoi du comment stp ?

Et dans ta boucle if, si Rst vaut 0, cela signifie qu'il n'y a pas d'enregistrements. Est-ce correct ?

En tout cas je vous remercie de m'avoir aidé

code adopté
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
    Dim Rst As DAO.Recordset
    Dim Db As DAO.Database
    Dim strSQL As String
 
    strSQL = "SELECT * FROM tblEmprunt WHERE fkObjet = " & iNumObjet & ";"
    Set Db = CurrentDb()
    Set Rst = Db.OpenRecordset(strSQL, dbOpenDynaset)
 
    If Rst.RecordCount > 0 Then
        Rst.MoveLast
        MsgBox (Rst.RecordCount)
    End If
 
    Rst.Close
    Set Rst = Nothing
    Set Db = Nothing
Gibra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 16h19   #10
Membre Expert
 
Avatar de keita
 
Homme
Inscription : novembre 2002
Messages : 879
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Côte d'Ivoire

Informations forums :
Inscription : novembre 2002
Messages : 879
Points : 1 015
Points : 1 015
Envoyer un message via MSN à keita
hello
Citation:
...mais très bien "* FROM tblEmprunt".
Autant pour moi; j'ai oublié le FROM et c'est bien d'avoir relevé ça.
Citation:
Et dans ta boucle if, si Rst vaut 0, cela signifie qu'il n'y a pas d'enregistrements. Est-ce correct ?
Tout à fait Gibra. si Rst.Recordcount vaut 0 pour être plus précis.
Et maintenant à toi la FAQ!
http://vb.developpez.com/faqvba/
@+
keita 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 23h43.


 
 
 
 
Partenaires

Hébergement Web