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 29/12/2011, 02h38   #1
Membre du Club
 
Inscription : juin 2008
Messages : 126
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 126
Points : 54
Points : 54
Par défaut exécution sql en vba

Bonjour le forum,

Dans la gestion d'une bibliothèque, je voudrais savoir si un commentaire a été écrit sur un livre. Si oui, un bouton "btn_comment" devrait s'afficher.
Je dispose donc e.a. de deux tables t_livres" et "t_comments" liées par une relation de un à plusieurs sur le champ "id_livre".
Dans la procédure événementielle "sur activation", j'ai récupéré l'instruction SQL d'une requête avec regroupement et comptage:
Code :
1
2
3
4
5
6
7
8
9
    Dim str_SQL As String
    str_SQL = "SELECT t_livres.id_livre, Count(t_comments.n_livre) AS nbre_enreg 
FROM t_livres RIGHT JOIN t_comments ON t_livres.id_livre = t_comments.id_livre
GROUP BY t_livres.id_livre 
HAVING (((t_livre.id_livre)=[Formulaires]![f_biblio]![ssf_livres].[Formulaire]![id_livre]))"
    If IsEmpty(nbre_enreg) Then
        Btn_comment.Visible = False
    Else: Btn_comment.Visible = True
    End If
la requête donne un résultat correct.
En VBA, le champ calculé "nbre_enreg" est toujours vide.
Quelqu'un pourrait-il me dire où le bât blesse?
D'avance merci pour vos réponses.
Harry
Harry Covair est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 05h20   #2
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 625
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 625
Points : 30 958
Points : 30 958
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

Il manque des bouts à ton code, car on ne voit pas comment tu veux mettre le retour de ta requête dans ton champnbre_enreg.

De toute façon, je pense que tu devrais lire ce tuto : Résultats dans Labels, Zones de Texte ou MsgBox

Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 09h35   #3
Rédacteur/Modérateur
 
Avatar de Jeannot45
 
Homme Jean BALLAT
Inscription : octobre 2004
Messages : 2 856
Détails du profil
Informations personnelles :
Nom : Homme Jean BALLAT
Âge : 63
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : octobre 2004
Messages : 2 856
Points : 5 220
Points : 5 220


Tu pourrais aussi passer par DAO :

Code VBA :
1
2
3
4
5
6
7
8
9
10
11
12
 
    ' Déclaration des variables
    Dim l_strSql As String
    Dim l_rsComment As DAO.Recordset
    ' Initialisation des variables
    l_strSql = "SELECT * FROM T_Comments WHERE id_livre = " & [Formulaires]![f_biblio]![ssf_livres].[Formulaire]![id_livre]    
    Set l_rsComment = CurrentDb.OpenRecordset(l_strSql)
    ' Test sur le nombre d'enregistrements retournés
    If l_rsComment.RecordCount > 0 Then
        Btn_comment.Visible = False
    Else: Btn_comment.Visible = True
    End If

A contrôler car je n'ai pas testé

Petite remarque quant à RecordCount :

Pour connaitre le nombre d'enregistrements contenus dans le Recorset il faut lire le jeu complet la procédure suivante :

Code VBA :
1
2
3
4
5
6
7
8
9
 
Dim l_NbEnreg as integer
With l_rsComment
     ' Envoi le pointeur en fin du recordset
     . MoveLast
     l_NbEnreg = .RecordCount
     ' Envoi le pointeur en début de recordet pour poursuivre le traitement
     .MoveFirst
End With

Bonne continuation
__________________
Jeannot

Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., [B]Sources VBA

Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre
Jeannot45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2012, 21h31   #4
Membre du Club
 
Inscription : juin 2008
Messages : 126
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 126
Points : 54
Points : 54
Bonsoir Philippe, Bonsoir Jeannot45,
Permettez-moi de vous présenter, ainsi qu’aux membres du forum, mes meilleurs vœux pour 2012.
Merci pour vos réponses ; j’ai pris quelques jours de repos mais ne suis pas resté inactif.
Grâce à la lecture conseillée par Philippe et à la piste proposée par Jeannot45, mon problème sql est résolu et la solution me donne satisfaction.
Harry
Harry Covair 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 08h03.


 
 
 
 
Partenaires

Hébergement Web