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

Projets ADP Discussion :

Compteur dans une requete !


Sujet :

Projets ADP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Compteur dans une requete !
    Bonjour à tous et toutes,

    voilà je viens de finaliser une base de données relativement complète dans le cadre de mon boulot. J'utilise Access 2010 comme interface liée à ma base de données SQL (server 2012).

    Il me reste cependant un petit point pour tendre vers le sans faute .

    Je vous expose mon problème :

    J'ai une table contenant pas mal de champs je vais en prendre qq1 pour l'exemple :

    Table dbo.listing

    champ1[code] clé primaire type int
    champ2[date_demande] type datetime
    champ3[nom] type varchar(30)
    champ4[question] type text
    champ5[reponse]type text
    champ6[date_facturation]

    Alors autant je sais créer une requête qui me renvoi les tous les champs dont le champ6[date_facturation] est égal à NULL et ajoute une colonne "Compteur" qui me numérote les résultats. Mais là ou ça se corse, en tout cas pour moi c'est que j'aimerais dans un formulaire double affichage afficher :

    Les enregistrements avec comme critère la date de facturation (reprise depuis un champs date du formulaire et rafraichit par un petit Me.requery sur clic) pour éditer une sorte de reporting (ça je sais faire sans aucun problème une requête)
    Mais aussi que cette requête me renvoie en plus de mes champ un champ "Compteur" qui me numérote les résultats de 1 à n

    Alors j'ai bien essayé avec ma requête précédente que je vous soumet :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT     (SELECT     COUNT(*) AS Expr1
                           FROM          dbo.Rqt_facturation
                           WHERE      (code_suivi <= SSReq.code_suivi) AND (cat_question <> 'NC')) AS Compteur, code_suivi, date_demande, cat_question, question, 
                          reponse, date_factu, factu_sstrait
    FROM         dbo.Rqt_facturation AS SSReq

    Le problème est que la numérotation commence bien à 1 mais pas en intégrant mon critère de date de facturation ce qui pose le problème que lorsque je filtre dans mon formulaire mon résultat filtré renvoi un compteur par ex de 26 à 85 au lieu de 1 à 60

    Mon formulaire si pour le moment je ne tiens pas compte du compteur fonctionne parfaitement mais si je veux ajouter un champ juste pour numéroter mes enregistrements ça ne marche pas (du moins JE ne sais pas le faire)

    J'ai donc essayé via une requête sql sans succès, avec un champs texte indépendant et une boucle for (en vba) toujours rien, en passant par un compte(*) pour borner ma boucle non plus.

    Bref je suis dans la panade totale car je ne trouve pas de solution à mon problème que je pourrais résumer en :

    Comment ajouter un champ qui numérote les résultats d'une requête, elle-même filtrée selon la valeur d'un champ (date de facturation) dans un formulaire double affichage ?

    Merci par avance, en espérant avoir été clair !

    Cordialement

  2. #2
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 114
    Points : 108
    Points
    108
    Par défaut
    bonjour

    sur une base access simple je t'aurais dit de passer par une table locale dans lequel tu aurais exporter ta requete avec un champ en numéroauto
    ou en utilisant une fonction ou variable globale qui s'incrémente et qui retourne sa valeur dans ta requête

    mais dans un projet adp, je ne sais pas si c'est possible

    bon courage

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup pour ta réponse Begon0.

    Pourrais-tu expliquer stp plus en détail la procédure que tu proposes je peux peux-être l'adapter.

    Merci par avance.

  4. #4
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 114
    Points : 108
    Points
    108
    Par défaut
    voilà ce qu'on peut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public Num as long
     
    Public Function MonNum(code As Long) As Long
        Num = Num + 1
        MonNum = Num
    End Function
    pour le sql par ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT MonNum(Code) FROM dbo.listing WHERE MonCritere
    je te laisse adapter à tes besoins
    le paramètre code que je passe dans la fonction n'est pas utilisé mais permet juste de lancer la fonction pour chaque enregistrement sinon la fonction n'est exécutée qu'une fois et renvoie la même valeur

    il faut ensuite réinitialiser la variable Num avant l'exécution de la requête si tu veux repartir à 1 à chaque fois

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Tout d'abord merci Begon0 pour tes réponses.

    Ta solution m'a permis de me poser la question sous un autre angle et voici la solution que j'ai mis en place. Si vous avez des avis remarques ou si d’aventure ça peux servir a quelqu'un :

    Donc afin de pouvoir afficher les résultats de ma requête filtrée selon la valeur (une date en l’occurrence) d'un champs présent dans un formulaire et surtout que cet affichage (c'était le cœur de mon "problème") le soit avec une colonne compteur j'ai procédé ainsi :

    1- Création d'une requête avec l'ensemble de mes conditions à savoir : filtre sur la date saisie dans le formulaire et filtre sur le type de question
    2- Création d'une seconde requête reprenant la précédente en y ajoutant mon compteur.

    En fait, j'ai simplement "déplacé" mes filtres dans une requête indépendante pour ensuite y appliquer le compteur.

    Pour info voici mes deux requêtes :

    Requête 1 sans le "compteur" mais avec les filtres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT dbo_suivi_demande.code_suivi, dbo_suivi_demande.code_acteur, dbo_suivi_demande.cat_question, dbo_collectivites.nom_court, dbo_suivi_demande.question, dbo_suivi_demande.reponse, dbo_suivi_demande.date_demande, dbo_suivi_demande.date_factu, dbo_autres.entite, dbo_bureau_etude.nom_be
    FROM dbo_bureau_etude RIGHT JOIN (((dbo_suivi_demande LEFT JOIN dbo_collectivites ON dbo_suivi_demande.code_acteur = dbo_collectivites.code_acteur) LEFT JOIN dbo_autres ON dbo_suivi_demande.code_autres = dbo_autres.code_autres) LEFT JOIN dbo_inge_be_formes ON dbo_suivi_demande.code_inge = dbo_inge_be_formes.code_inge) ON dbo_bureau_etude.code_be = dbo_inge_be_formes.code_be
    WHERE (((dbo_suivi_demande.cat_question)<>"Hors champ assistance") AND ((dbo_suivi_demande.date_factu)=[Forms]![Rqt_export]![Texte88]));
    Requête 2 avec le "compteur" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT (SELECT     COUNT(*) AS Expr1
    FROM Rqt_export_sscompteur
    WHERE (code_suivi <= SSReq.code_suivi)) AS Compteur, SSReq.code_suivi, SSReq.code_acteur, SSReq.cat_question, SSReq.nom_court, SSReq.question, SSReq.reponse, SSReq.date_factu, SSReq.entite, SSReq.nom_be, SSReq.date_demande
    FROM Rqt_export_sscompteur AS SSReq;

    J'appelle cette requête 2 dans mon formulaire double affichage et ça marche.

    Petit bémol, l'affichage du résultat prend quelques secondes je ne sais pas si je peux optimiser la rapidité par contre.

    Merci encore pour tout.

  6. #6
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 114
    Points : 108
    Points
    108
    Par défaut
    oui ta sous requête qui renvoie ton compteur doit être consommatrice de ressources

    tant mieux si ça fonctionne

    n'oublies pas de mettre résolu si tu considères que c'est la cas

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Penses-tu que je puisse diminuer ce "besoin en ressource" ?

  8. #8
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 114
    Points : 108
    Points
    108
    Par défaut
    je ne sais pas à quoi ressemble ton formulaire et ce que tu veux en faire, mais tu pourrais utiliser une zone de liste que tu remplis par code au lieu d'affecter le sql dans le rowsource
    donc en faisant une boucle sur un recordset contenant tes données, tu pourrais remplir la liste en mettant un compteur que tu incrémentes à chaque passage dans le boucle

    après à voir si c'est plus rapide comme ça ou pas

Discussions similaires

  1. [Oracle 10G] Deux compteurs dans une requete
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 4
    Dernier message: 24/04/2008, 08h59
  2. [SQL] Ajout d'un compteur dans une requete
    Par at_first dans le forum Access
    Réponses: 7
    Dernier message: 04/10/2006, 16h40
  3. Quote dans une requete...
    Par Isildur dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/06/2006, 10h57
  4. Syntaxe pour avoir un seul resultat dans une requete
    Par Pompil dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/09/2003, 15h51
  5. [syntaxe] Gerer les variables dans une requete
    Par rastapopulos dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 15/04/2003, 12h53

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