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 :

opération sur enregistrement inexistant


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Août 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Santé

    Informations forums :
    Inscription : Août 2007
    Messages : 153
    Points : 73
    Points
    73
    Par défaut opération sur enregistrement inexistant
    Bonjour à tous...

    J'ai besoin d'aide, je ne comprends pas. Merci à vous...

    Soit une table ID composée de 220 enregistrements.

    Un requête PRESENTS me sélectionne parmis la table ID les présents du jour, j'obtiens donc un nombre inférieur (150 enregistrements par exemple).

    puis, dans un formulaire basé sur l'ensemble des enregistrements (220), je crée un champ de type "30 - PRESENTS.champ"...
    Quand je navigue dans entre les enregistrements, l'opération se passe bien pour les 150 enregistrements le la reqête, mais le résultat de la soutraction disparaît totalement pour les ID non présents dans la requête.

    Alors que je souhaiterai que le resultat soit 30 !

    Il semble que quand l'ID est absent de la requête, sa valeur ne soit pas 0.

    Il faudrait donc que les 220 enregistrement soit présent dans la requête sélection, avec un 0 comme résultat pour les champs non existants.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT R_usagers_actifs.ID, Presences.Type_congés, Count(Presences.Type_congés) AS CompteDeType_congés
    FROM R_usagers_actifs LEFT JOIN Presences ON R_usagers_actifs.ID = Presences.ID
    GROUP BY R_usagers_actifs.ID, Presences.Type_congés
    HAVING (((Presences.Type_congés)="absence injustifiée"));
    Merci de votre aide

    Sylvain

  2. #2
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut sylvain,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    30 - Nz(PRESENTS.champ,0)

  3. #3
    FMJ
    FMJ est déconnecté
    Membre averti
    Profil pro
    tutu
    Inscrit en
    Octobre 2003
    Messages
    416
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : Octobre 2003
    Messages : 416
    Points : 363
    Points
    363
    Par défaut
    Normal : 30 - Null = Null

    utilise la formule de Vodiem ou celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    30 - ISNULL(PRESENTS.champ,0)

  4. #4
    Membre régulier
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Août 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Santé

    Informations forums :
    Inscription : Août 2007
    Messages : 153
    Points : 73
    Points
    73
    Par défaut Nz ok
    Bonjour et merci de votre aide

    Nz fonctionne effectivement. Cela retarde l'affichage, mais ça fonctionne. Merci

    Isnull est plus rapide, mais ne donne pas le resultat escompté (additionne au lieu de déduire) ???

    Bon dimanche à vous

    Sylvain

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Août 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Santé

    Informations forums :
    Inscription : Août 2007
    Messages : 153
    Points : 73
    Points
    73
    Par défaut suite...
    Je reviens vers vous comprendre...
    Bien que cela fonctionne.

    Ceci fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Quantité]-nz([CompteDeType_congés])
    alors que ceci ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Quantité]-nz([CompteDeType_congés],0)
    Est-ce le motif de la lenteur de l'affichage ?

    Merci et bonne soirée

    Sylvain

  6. #6
    FMJ
    FMJ est déconnecté
    Membre averti
    Profil pro
    tutu
    Inscrit en
    Octobre 2003
    Messages
    416
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : Octobre 2003
    Messages : 416
    Points : 363
    Points
    363
    Par défaut
    Salut,

    Je n'y avais pas prêté attention mais la bonne syntaxe de la fonction NZ() est bien la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Quantité]-NZ([CompteDeType_congés])
    Il n'y a pas de raison à ce que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Quantité]-ISNULL([CompteDeType_congés])
    conduise à une addition si [Quantité]>0 et [CompteDeType_congés]>0.
    Les deux formules doivent conduire au même résultat.
    Vérifie tes données.

    NZ ne renvoie que 0 si le champ en paramètre est Null tandis qu'avec ISNULL, on peut remplacer par la valeur de son choix.

    Ce sont des fonctions intégrées qui devraient avoir à peu près la même rapidité. A priori,tes "lenteurs" ne viendraient pas de là.

    Ces deux fonctions sont bien documentées dans l'aide intégrée Access.

  7. #7
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    Citation Envoyé par FMJ Voir le message
    Salut,

    Je n'y avais pas prêté attention mais la bonne syntaxe de la fonction NZ() est bien la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Quantité]-NZ([CompteDeType_congés])
    Il n'y a pas de raison à ce que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Quantité]-ISNULL([CompteDeType_congés])
    conduise à une addition si [Quantité]>0 et [CompteDeType_congés]>0.
    Les deux formules doivent conduire au même résultat.
    Vérifie tes données.

    NZ ne renvoie que 0 si le champ en paramètre est Null tandis qu'avec ISNULL, on peut remplacer par la valeur de son choix.

    Ce sont des fonctions intégrées qui devraient avoir à peu près la même rapidité. A priori,tes "lenteurs" ne viendraient pas de là.

    Ces deux fonctions sont bien documentées dans l'aide intégrée Access.
    permet moi FMJ de te contredire et te référer à <F1>
    si:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Quantité]-nz([CompteDeType_congés],0)
    ne marche pas c'est que c'est du vb. Il faut remplacer la virgule par un point-virgule dans la source d'un controle ou dans le qbe.
    le "0" est optionnel mais j'ai trouvé utile de le mettre pour faire comprendre qu'il est possible de mettre une autre valeur.
    isnull()=estnull() est une fonction qui renvoie un boolean, je pensais que tu allais remarquer le quiproquo.

Discussions similaires

  1. [SQL] opération sur l'enregistrement qui suit
    Par namstou3 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/08/2007, 15h43
  2. Ouverture formulaire sur enregistrement precis
    Par mat_lefebvre dans le forum IHM
    Réponses: 7
    Dernier message: 11/10/2004, 15h37
  3. opération sur fermeture de fenêtre
    Par java_math dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 20/06/2004, 22h52
  4. opérations sur les bits d'un byte
    Par petitours dans le forum C++Builder
    Réponses: 4
    Dernier message: 10/02/2004, 20h42
  5. opérations sur les dates
    Par coucoucmoi dans le forum Débuter
    Réponses: 2
    Dernier message: 12/08/2003, 11h45

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