Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
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 22/02/2011, 16h47   #1
Nouveau Membre du Club
 
Homme
Technicien maintenance
Inscription : juin 2008
Messages : 110
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Technicien maintenance
Secteur : High Tech - Matériel informatique

Informations forums :
Inscription : juin 2008
Messages : 110
Points : 35
Points : 35
Par défaut Equivalent NVL(Oracle) sous ACCESS

Bonjour,

J'ai une requête sql (aussi bien en vba qu'en requête access) avec un count qui doit me renvoyer un nombre d'enregistrement sur laquelle je voudrais renvoyé "0" s'il n'y a pas d'enregistrement.

Mon problème c'est que le résultat est vide.

Avec une valeur i=aaa j'ai 5 enregistrements dans ma table et ca me renvoit bien 5 par contre avec la valeur i = bbb je n'ai aucune ligne dans ma table et ca me renvoit rien.
Ni "0" ni "Null" car je fait un If isnull et ca rentre pas dans ma boucle.

Existe t'il un équivalent de NVL (Oracle) sous acess qui puisse me renvoyé 0, j'ai essayé
Code :
Select Nz(Count(*)),0) AS mon_nombre From ...
mais mon champ est toujours vide, même si je remplace "0" par "1" mon champ reste vide.
HELP HELP HELP
chouchouilloux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 17h28   #2
Membre habitué
 
Inscription : janvier 2006
Messages : 99
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2006
Messages : 99
Points : 101
Points : 101
Bonsoir,

L'équivalent de nvl sous Oracle est bien Nz sous Access.
Mais je suis assez surpris par le résultat null que vous obtenez. CCar j'ai fait un test de mon coté et un Select Count sur une table vide me renvoie bien 0 comme valeur...
Le problème vient peut-être d'ailleurs. Est-ce des tables locales ou attachées ?

Cordialement,
Aegnor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 17h51   #3
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour à tous,

Je me permets de m'immiscer...

Je ne connais pas VBA, mais l'instruction
Code sql :
SELECT Nz(Count(*)) AS mon_nombre FROM T1 WHERE...
me paraît erronée pour ce que tu veux en faire.


En effet, si
Code sql :
SELECT Count(*) AS mon_nombre FROM T1 WHERE...
ne renvoie aucune donnée, alors le Count(*) ne peut pas être traité par le Nz, puisqu'il n'apparaît que s'il existe au moins une ligne sélectionnée par le SQL (ce que tu as constaté).


Si j'ai bien compris, ce que tu veux faire c'est plutôt un truc du genre :
Code sql :
X = Nz(SELECT Count(*) AS mon_nombre FROM T1 WHERE...)
ce qui est différent de :
Code sql :
X = SELECT Nz(Count(*)) AS mon_nombre FROM T1 WHERE...

Je ne sais pas si j'ai été bien clair, sur ce coup là...
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 19h07   #4
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 410
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 410
Points : 4 439
Points : 4 439
bonjour,

Citation:
Envoyé par Aegnor Voir le message
Mais je suis assez surpris par le résultat null que vous obtenez. Car j'ai fait un test de mon coté et un Select Count sur une table vide me renvoie bien 0 comme valeur...,
je confirme, c'est donc très curieux...
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 10h24   #5
Nouveau Membre du Club
 
Homme
Technicien maintenance
Inscription : juin 2008
Messages : 110
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Technicien maintenance
Secteur : High Tech - Matériel informatique

Informations forums :
Inscription : juin 2008
Messages : 110
Points : 35
Points : 35
Citation:
Envoyé par f-leb Voir le message
bonjour,



je confirme, c'est donc très curieux...
Salut,

Voici ma requete en entière :
Code :
1
2
3
4
SELECT COUNT(*) AS COUNT_TVA2
FROM T_TVA INNER JOIN (T_PRESTATION INNER JOIN T_DETAIL_FACTURE ON T_PRESTATION.[PRESTA_ID] = T_DETAIL_FACTURE.[T_DETAIL_FACT_PREST]) ON T_TVA.TVA_ID = T_PRESTATION.PRESTA_TVA
GROUP BY T_DETAIL_FACTURE.T_DETAIL_FACT_FACT, T_PRESTATION.PRESTA_TVA
HAVING (((T_DETAIL_FACTURE.T_DETAIL_FACT_FACT) =25) And ((T_PRESTATION.PRESTA_TVA) = 2));
EN image le résultat de ma requête.

Je vais essayer sinon celle du dessus
Images attachées
Type de fichier : png resultat requête.png (5,1 Ko, 4 affichages)
chouchouilloux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 10h41   #6
Nouveau Membre du Club
 
Homme
Technicien maintenance
Inscription : juin 2008
Messages : 110
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Technicien maintenance
Secteur : High Tech - Matériel informatique

Informations forums :
Inscription : juin 2008
Messages : 110
Points : 35
Points : 35
J'ai essayé comme précédemment mais erreur, requête SQL non valide.

Mais j'ai trouvé en fouinant un peu plus, une bonne nuit porte conseil lol.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
' Calcul tva2 (19.60%)
        SQL_TVA2 = "SELECT Sum(T_DETAIL_FACT_PRIX_TOTAL) AS TOTAL_TTC2, Sum(T_DETAIL_FACT_PRIX_HT_TOTAL) AS TOTAL_HT2, (PRESTA_TVA) AS CODE_TVA2"
        SQL_TVA2 = SQL_TVA2 & " FROM T_TVA INNER JOIN (T_PRESTATION INNER JOIN T_DETAIL_FACTURE ON T_PRESTATION.[PRESTA_ID] = T_DETAIL_FACTURE.[T_DETAIL_FACT_PREST]) ON T_TVA.TVA_ID = T_PRESTATION.PRESTA_TVA"
        SQL_TVA2 = SQL_TVA2 & " GROUP BY T_DETAIL_FACTURE.T_DETAIL_FACT_FACT, T_PRESTATION.PRESTA_TVA"
        SQL_TVA2 = SQL_TVA2 & " HAVING (((T_DETAIL_FACTURE.T_DETAIL_FACT_FACT) = " & fact_tva_id & ") And ((T_PRESTATION.PRESTA_TVA) = 2));"
 
        Set rs = db.OpenRecordset(SQL_TVA2)
        COUNT_TVA2 = rs.RecordCount
 
    If COUNT_TVA2 > 0 Then
        ' TOTAL_TTC2 // TOTAL_HT2 // CODE_TVA2
        montantttc2 = rs![TOTAL_TTC2]
        montantht2 = rs![TOTAL_HT2]
        codetva2 = rs![CODE_TVA2]
        montanttva2 = montantttc2 - montantht2
        tauxtva2 = "19,60 %"
    Else
        montantttc2 = 0
        montantht2 = 0
        codetva2 = 0
        montanttva2 = 0
        tauxtva2 = "19,60 %"
    End If
chouchouilloux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 10h55   #7
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Chouchouilloux (et à tous),

Dans ton premier post, tu fais état de cette requête :
Code sql :
SELECT Nz(Count(*)),0) AS mon_nombre FROM ...
==> avec un "Where", puisque tu parles de valeurs testées : cela ne peut pas fonctionner si aucune ligne n'est renvoyée !


En revanche
Code sql :
COUNT_TVA2 = Nz(SELECT Count(*) AS mon_nombre FROM T1 WHERE...)
fonctionne.

Tu l'as remplacé par
Code sql :
IF COUNT_TVA2 > 0 Then...
cela fonctionne aussi.


La "morale" de ce fil, me semble-t-il, est que
Code sql :
X = Nz(SELECT Count(*) AS mon_nombre FROM T1 WHERE...)
est différent de :
Code sql :
X = SELECT Nz(Count(*)) AS mon_nombre FROM T1 WHERE...
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 20h50   #8
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 410
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 410
Points : 4 439
Points : 4 439
bonsoir,

il me semble que la requête du post #5 pourrait être ré-écrite plus simplement en:
Code sql :
1
2
3
4
5
6
7
8
9
SELECT COUNT(*) AS count_tva2
FROM   t_tva
       INNER JOIN (t_prestation
                   INNER JOIN t_detail_facture
                     ON t_prestation.[PRESTA_ID] =
                        t_detail_facture.[T_DETAIL_FACT_PREST])
         ON t_tva.tva_id = t_prestation.presta_tva
WHERE  t_detail_facture.t_detail_fact_fact = 25
       AND t_prestation.presta_tva = 2;

et devrait retourner 0 si aucun enregistrement n'est retourné.
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h26.


 
 
 
 
Partenaires

Hébergement Web