IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Equivalent NVL(Oracle) sous ACCESS


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 161
    Points : 86
    Points
    86
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 106
    Points : 135
    Points
    135
    Par défaut
    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,

  3. #3
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour à tous,

    Je me permets de m'immiscer...

    Je ne connais pas VBA, mais l'instruction
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    X = Nz(Select Count(*) AS mon_nombre From T1 where...)
    ce qui est différent de :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    X = Select Nz(Count(*)) AS mon_nombre From T1 where...

    Je ne sais pas si j'ai été bien clair, sur ce coup là...

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 764
    Points : 58 075
    Points
    58 075
    Billets dans le blog
    42
    Par défaut
    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...

  5. #5
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 161
    Points : 86
    Points
    86
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 Images attachées  

  6. #6
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 161
    Points : 86
    Points
    86
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Chouchouilloux (et à tous),

    Dans ton premier post, tu fais état de cette requête :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    COUNT_TVA2 = Nz(SELECT Count(*) AS mon_nombre FROM T1 WHERE...)
    fonctionne.

    Tu l'as remplacé par
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    If COUNT_TVA2 > 0 Then...
    cela fonctionne aussi.


    La "morale" de ce fil, me semble-t-il, est que
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    X = Nz(SELECT Count(*) AS mon_nombre FROM T1 WHERE...)
    est différent de :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    X = SELECT Nz(Count(*)) AS mon_nombre FROM T1 WHERE...

  8. #8
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 764
    Points : 58 075
    Points
    58 075
    Billets dans le blog
    42
    Par défaut
    bonsoir,

    il me semble que la requête du post #5 pourrait être ré-écrite plus simplement en:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    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é.

Discussions similaires

  1. Fonction oracle sous access
    Par Retrokiller069 dans le forum Access
    Réponses: 3
    Dernier message: 28/06/2011, 12h43
  2. lire une séquence Oracle sous Access
    Par 18mar dans le forum Access
    Réponses: 3
    Dernier message: 27/12/2007, 13h57
  3. [MySql] Equivalent NVL de Oracle
    Par nantais dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 26/09/2007, 15h28
  4. Equivalent jointure externe (+) ORACLE sous ACCESS ?
    Par caboche dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 07/08/2007, 14h05
  5. transferer des tables oracle sous access
    Par lassmust dans le forum Oracle
    Réponses: 3
    Dernier message: 28/12/2005, 13h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo