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 :

"dynamiser" une requête [AC-2003]


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2011
    Messages : 379
    Points : 137
    Points
    137
    Par défaut "dynamiser" une requête
    Bonjour à tous et à toutes,

    Dans une requête basée sur une T Cotisation dues (Du09,Du10,Du11...Du35), j'ai le calcul suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Total du : [Du09]+[Du10]+[Du11]+[Du12]+[Du13]+[Du14]
    L'année prochaine il me faudra corriger cette formule
    Total du : [Du10]+[Du11]+[Du12]+[Du13]+[Du14]+[Du15]

    Techniquement ce n'est pas le top et il y a un risque non négligeable d'erreur.
    Y-a-t-il un moyen d'automatiser cela ?
    J'ai en tête de passer par un formulaire où j'aurai 5 listes déroulantes me permettant de choisir les noms des champs, d'avoir 5 contrôles affichant les valeurs correspondantes et d'utiliser ces contrôles dans la formule de ma requête (Forms1!controle1+Forms2!contrôle2...) mais je tourne en rond pour concevoir ce formulaire.

    Peut-être n'est -il pas obligatoire de passer par un formulaire intermédiaire, mais là je ne sais pas.

    Merci de me remettre sur les rails.

    A+

    C15nantes

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 920
    Points
    281 920
    Par défaut
    Bonjour,

    Le vrai problème, c'est la structure de ta table : tu aurais dû choisir une autre technique pour enregistrer les cotisations.

    Pour rattraper la sauce, tu pourrais écrire une procédure qui créerait le SQL de la requête en donnant comme paramètres la 1re et la dernière cotisation.

    Peux-tu poster un échantillon de ta db (avec des données anonymes bien sûr !) et en version Access2000.

  3. #3
    Membre habitué Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2011
    Messages : 379
    Points : 137
    Points
    137
    Par défaut
    Bonjour,

    >>>
    Le vrai problème, c'est la structure de ta table : tu aurais dû choisir une autre technique pour enregistrer les cotisations.
    >>>
    C'est effectivement bien pour cela que j'étais bloqué.
    C'est pas de chance car je viens justement de restructurer totalement ma base en "éclatant" ma table initiale où j'avais tout regroupé en plusieurs tables (T_cotisations à payer, T cotisations dues, T adhérents...)

    Tu confirmes une base "light" en version 2000 ?
    J'essaye de t'en préparer une pour demain, selon ta réponse je la convertirai ou pas en 2000.

    Merci d'avance
    A+

    C15nantes

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 920
    Points
    281 920
    Par défaut
    Je te confirme que j'utilise Access2000.

  5. #5
    Membre habitué Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2011
    Messages : 379
    Points : 137
    Points
    137
    Par défaut
    Bonsoir,

    OK

    Entre temps, j'ai eu le temps de faire une base navette en 2000 (en PJ).

    Merci de ton aide.

    Je ne pourrais exploiter ton éventuelle réponse que demain matin.

    Bonne soirée.

    A+

    C15nantes
    Fichiers attachés Fichiers attachés

  6. #6
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 920
    Points
    281 920
    Par défaut
    Bonsoir,

    Tes données sont organisées comme si tu utilisais un tableur et non une base de données relationnelle !
    Voici une fonction qui va générer ta requête



    Code vb : 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
    24
    Option Compare Database
    Option Explicit
     
     
    Public Sub CotiDues(NumDebut As Integer)
      Dim sSql As String
      Dim q As QueryDef
      sSql = "SELECT [T Adhérents].N°Adherent, [T Adhérents].Nom, [T Adhérents].Prenom, " _
              & "[Du" & Format(NumDebut, "00") & "]+[Du" & Format(NumDebut + 1, "00") & "]" _
              & "+[Du" & Format(NumDebut + 2, "00") & "]+[Du" & Format(NumDebut + 3, "00") & "]" _
              & "+[Du" & Format(NumDebut + 4, "00") & "]+[Du" & Format(NumDebut + 5, "00") & "]" _
                 & " AS [Total dû], [T Cotisations dues].Du" & Format(NumDebut, "00") & "," _
                   & "[T Cotisations dues].Du" & Format(NumDebut + 1, "00") & "," _
                   & "[T Cotisations dues].Du" & Format(NumDebut + 2, "00") & "," _
                   & "[T Cotisations dues].Du" & Format(NumDebut + 3, "00") & "," _
                   & "[T Cotisations dues].Du" & Format(NumDebut + 4, "00") & "," _
                   & "[T Cotisations dues].Du" & Format(NumDebut + 5, "00") _
              & " FROM ([T Adhérents] INNER JOIN [T Cotisations] " _
                  & " ON [T Adhérents].N°Adherent = [T Cotisations].N°Adherent) " _
                    & " INNER JOIN [T Cotisations dues] ON [T Adhérents].N°Adherent = [T Cotisations dues].N°Adherent " _
              & " WHERE ((([T Adhérents].Adherent) = True)) ORDER BY [T Adhérents].Nom, [T Adhérents].Prenom;"
      Set q = CurrentDb.QueryDefs("rCotiDues")
      q.SQL = sSql
    End Sub
    Fichiers attachés Fichiers attachés

  7. #7
    Membre habitué Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2011
    Messages : 379
    Points : 137
    Points
    137
    Par défaut
    Bonjour Claude Leloup

    Tout d'abord, merci de ta réponse, cela fonctionne parfaitement et répond pile poil à ma question.

    Par ailleurs tu me disais
    >>>
    Tes données sont organisées comme si tu utilisais un tableur et non une base de données relationnelle !
    >>>

    Cette remarque, sans doute justifiée, me surprend un peu.

    En effet, jusqu'à la fin janvier, j'avais une table T Adhérents regroupant les coordonnées adhérents, les présences Ag (AG83 à AG35), les cotisations à payer (C87 à C35), les cotisations dues (Du97 à Du35).
    Structure bizarre, mais j'ai repris le dossier en urgence suite au décès du concepteur.
    C'était un peu galère à gérer ; par exemple j'ai ajouté récemment les champs Ag15 à Ag 35, C15 à C35 et Du 15 à Du35 pour avoir 20 ans devant moi

    Tous ceux à qui j'avais montré ma base m'avaient dit que la structure n'était pas bonne et qu'il me fallait "éclater" cette grosse T Adhérents avec beaucoup trop de champs.
    J'ai donc créé ces nouvelles tables T AG ; T cotisations dues et T cotisations.

    J'avoue être un peu perdu dans tout cela.

    Comment aurais-je du organiser mes données ?

    Merci encore de ton aide.

    A+

    C15nantes

  8. #8
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 920
    Points
    281 920
    Par défaut
    Bonjour,

    Jette un œil sur cette discussion : http://www.developpez.net/forums/d14...recus-fiscaux/

    Je suis occupé à rédiger un tutoriel qui détaille la mise en œuvre.

    Si tu le désires, on pourrait faire quelque chose de ressemblant si tu es d'accord d'expliquer en détail ce que tu veux gérer comme informations dans ta db.

  9. #9
    Membre habitué Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2011
    Messages : 379
    Points : 137
    Points
    137
    Par défaut
    Bonjour Claude,

    Tout d'abord chapeau pour la base "clé en main" que tu as fournie à Vidica.
    Honnêtement j'ai lu cela en diagonale mais je suis impressionné par ton travail.
    Je vais m'y pencher davantage.

    Cela me rappelle les aides que m'ont fournies 3stone [belge lui aussi ] ou Raymond Seneque, entre autres, lorsque en 2002, j'ai repris en urgence la base *.adp laissée par son concepteur brutalement décédé.
    Au fur et à mesure des ans j'en suis arrivé à une base qui fonctionne, même si, et c'est pour cela que je m'y replonge profondément, elle ne répond pas aux standards et fondamentaux d'une base de données relationnelle.

    Le but principal est d'éditer un annuaire en couleurs constitué d'un trombinoscope, de différentes listes et graphiques montrant la vie de notre association.
    Le but secondaire est le suivi des adhérents (présences AG, cotisations)
    Par exemple la convocation à l'AG précise les cotisations dues sur les 5 dernières années (publipostage Word)
    La partie trésorerie est faite sur Excel.

    Pour en revenir à ta question, si je pouvais encore améliorer la structure de cette base, je suis à l'écoute de tous tes conseils.
    Mon souci est que cela soit toujours transparent pour le trésorier, utilisateur quotidien ; le peu qu'il sache faire est l'utilisation du Fadhérent pour les maj des cordonnées et du F cotisations pour l'enregistrement des cotisations. Par ailleurs il sait faire des requêtes simples.
    Mon autre souci, est de laisser quelque chose de propre lorsque je passerai le flambeau.

    Dernière chose, tout ce qui est finalisations des états pour les donner à l'imprimeur (210 pages) est de mon ressort.

    Je voulais te joindre une base complète de tous ses objets, elle est trop lourde (4 Mo) ; dis moi le minimum d'objets que tu voudrais

    Encore merci de ton aide

    A+

    c15 nantes

  10. #10
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 920
    Points
    281 920
    Par défaut
    Bonjour,


    elle est trop lourde (4 Mo)
    Je te communique mon adresse courriel via M.P.

  11. #11
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 920
    Points
    281 920
    Par défaut
    Merci pour l’envoi par e-mail (désolé que je ne puisse pas la rendre publique, car elle contient des données personnelles).

    J’ignore si tout ce qui se trouve dans cette base te sert encore.

    C’est vrai qu’il y aurait moyen d’améliorer le modèle de données, mais étant le nombre d’objets qu’il faudrait modifier dans cette base qui s’est étoffée au fil des ans, il vaut mieux renoncer. Surtout si elle fonctionne et qu’elle te donne les résultats que tu attends : n’y touche plus !

    Une perle : l’état « E Relations pour Basehélico ».

    Cela a dû demander des heures de mise au point à son auteur, une capture d’écran aurait fait l’affaire.

  12. #12
    Membre habitué Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2011
    Messages : 379
    Points : 137
    Points
    137
    Par défaut
    Bonjour,

    Merci de ta réponse,

    Effectivement au début, j'ai récupéré in extremis un fichier au format *.adp. Aucune documentation et on a failli se faire avoir par un problème de mot de passe sur le PC du défunt.
    Le concepteur avait fait cette base en s'inspirant d'un logiciel spécifique Sécurité sociale.

    J'ai utilisé la table T Adhérents avec plusieurs dizaines de champs et ai essayé d'améliorer la base en fonction du but recherché (l'annuaire que je devais "sortir" dans les 6 mois) et de mes compétences de l'époque sur Access.

    J'ai tenu le délai au prix de nombreuses heures de travail, de demandes répétées d'aide sur les forums et des mails aller/retour avec les utilisateurs potentiels qui ne se rendaient pas tout à fait compte de ce que cela représentait (moi non plus d'ailleurs).

    Au final, le résultat a plu aux 730 adhérents de l'association, même si j'étais tout à fait conscient des limites de l'exercice.

    C'est pour cela que petit à petit j'ai voulu l'améliorer, plus particulièrement tout récemment dissocier la grosse table en plusieurs petites.
    Et c'est donc là que je me suis un peu égaré par rapport aux fondamentaux d'Access.

    La restructuration des tables m'a effectivement demandé énormément de boulot pour remodeler tous mes objets, que j'ai tous fait de A à Z y compris l'état des relations

    Comme je suis en plein dedans, je vais m'inspirer de tes conseils et de tes liens pour faire quelque chose dont Monsieur Access n'aurait pas trop honte, sachant que c'est encore la version actuelle qui me servira de base pour le suivi des adhérents.

    Pour le moment, je vais te "libérer", et surtout te remercier grandement de ton aide, même si tu as appuyé un peu là où cela fait mal.

    Je reviendrai sans doute vers toi quand j'aurai fini car j'aurai vraisemblablement besoin d'aide pour le transfert de données de l'ancienne version à la nouvelle.

    Merci encore

    A+

    C15nantes

  13. #13
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 920
    Points
    281 920
    Par défaut
    Au plaisir de te recroiser.

  14. #14
    Membre habitué Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2011
    Messages : 379
    Points : 137
    Points
    137
    Par défaut
    Bonjour Claude,

    J'ai regardé en détail ce que tu avais proposé à Vidica ; un seul mot, chapeau bas, Monsieur !

    Je me suis donc inspiré de tes conseils pour restructurer ma base.

    Dans le fichier joint, tu verras la table des relations avec, à gauche l'ancienne version et à droite la nouvelle.

    Si j'applique tes conseils, je devrai avoir dans ma T_Adherent par exemple
    le champ T_Villes_FK relié à NUM_Villes_PK
    Mais alors dans ma table T_Adherent, j'aurai par exemple le chiffre 9 correspondant à KOKSIDE ou 1365 pour Bruxelles.

    Ce n'est pas très parlant.

    Si j'étais puriste, cela devrait être la même chose pour les prénom, origine, catégorie professionnelle, spécialité...

    L'outil de travail du trésorier (utilisateur quotidien) est le formulaire donné en exemple (dans lequel j'insérerai un sous formulaire basé sur la table T_Cotisation) et, in fine, j'ai à sortir un annuaire dont les données d'un adhérent sont dans la PJ (annuaire qui fait 220 pages).
    Est-il concevable que dans ma T_Adherent j'ai des champs comme Origine_FK, Specialite_FK...liés respectivement à Origine_PK de la T_Origines et Specialité_PK et non les numeroAuto associés qu'ils aurait fallu dénommer NUM_Origine_PK et NUM_Specialite_PK ?

    Par ailleurs, il faut savoir que j'ai actuellement 1261 adhérents dont il va me falloir insérer les données dans les T_Adherent et T_Cotisations (je ne sais d'ailleurs pas trop par quel moyen le faire).
    Ce n'est pas comme si je partais de zéro.

    Merci de me dire ce que tu en penses.

    A +

    C15Nantes
    Images attachées Images attachées

  15. #15
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 920
    Points
    281 920
    Par défaut
    Bonjour C15nantes,

    Merci de me dire ce que tu en penses.
    Ton modèle de données fait problème (par ex. : T_Prenom !!).

    Tu devrais lire ceci : http://mhubiche.developpez.com/Access/cours/bases/#LII.

    Quoi qu’il en soit, je te suggère de clôturer cette discussion qui n’a plus grand-chose à voir avec « dynamiser une requête ».

    Tu devrais avoir comme démarche de réflexion :
    1° quel est le but de l’application ? ;
    2° de quelles informations doit-on disposer pour atteindre ce but ? (ex. : le code postal de l’employeur de l’adhérent !!) ;
    3° comment grouper ces infos par entité ? ;
    4° définir les tables pour loger ces infos et établir leurs relations (le modèle de données) ;
    5° créer les outils (formulaires) pour encoder les infos ;
    6° récupérer ce qui est encore utile dans l’existant.

    Quand tu auras atteint le stade 4°, ouvre alors une nouvelle discussion dans la section « Modélisation » du forum et explique où tu en es.

  16. #16
    Membre habitué Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2011
    Messages : 379
    Points : 137
    Points
    137
    Par défaut
    Bonjour Claude,

    Merci de ces derniers conseils.

    Je vais tout remettre à plat.
    Sans doute cela va-t-il me demander beaucoup de travail pour revoir la conception de tous les objets existants mais il faudra vraisemblablement en passer par là.

    A+

    C15Nantes

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quotes avec une requête sqlite3
    Par goran kajfes dans le forum Général Python
    Réponses: 9
    Dernier message: 26/07/2009, 19h36
  2. Escaper les quotes d'une requête
    Par Nico-x dans le forum JDBC
    Réponses: 4
    Dernier message: 20/05/2009, 13h59
  3. [MySQL] Insérer résultat d'une requête : problème de quote
    Par maxime17s dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/12/2008, 04h42

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