|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2010 Messages : 88 ![]() |
Bonsoir,
Alors je vais essayé d'être clair... et ça va pas être simple !! j'ai une table dans laquelle se trouve deux colonnes "date" et "statut" la date reprends toutes les dates (du 01/012001 31/12/2015) et la colonne statut j'ai soit un "T" pour travaillé, soit "PT" pour non travaillé Dans une autre table, tout un tas de données dont 2 dates : 1- la date de confirmation de l'ordre de transfert 2- la date de l'extraction Dans une requête je calcul la différence entre (date de confirmation) et (date d'extraction): j'obtiens le nombre de jour global entre ce deux dates, ça c'est plutôt facile... Par contre gros souci, l'idée c'est de pouvoir soustraire les jours "non travaillés" (PT) pour chaque date Alors quel lien utiliser entre les deux tables (si c'est la solution) ou quel est éventuellement la formule a utiliser dans la requête ? J'espère avoir été clair. D'avance merci |
|
|
00
|
|
|
#2 |
![]() ![]() René MAROTInscription : octobre 2005 Messages : 5 479 ![]() |
Méthode butale : compter le nombre de jour PT entre tes deux dates. Un truc du genre
Code sql :
SELECT count([Statut]) FROM TaTableCalendrier WHERE [TaDate] BETWEEN [prmDateDebut] AND [prmDateFin] AND [Statut]="PT" où prmDateDebut et prmDateFin son les dates de début et de fin choisies. autre méthode plus directe mais toujours aussi brutale : compter les jours travaillés dans la table calendrier : Code sql :
SELECT count([Statut]) FROM TaTableCalendrier WHERE [TaDate] BETWEEN [prmDateDebut] AND [prmDateFin] AND [Statut]="T" cela évite d'avoir à soustraire les PT. A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs. |
|
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2010 Messages : 88 ![]() |
Merci marot_r,
La requête donne un nombre total. pour la table "date_T_PT" date Statut 02/01/2010 PT 03/01/2010 T 04/01/2010 T 05/01/2010 PT 06/01/2010 T 07/01/2010 PT Ce que je voudrais obtenir c'est un truc dans ce genre là... Date début date fin Ecart Nombre de jour PT 01/01/2010 05/01/2010 4 2 01/01/2010 07/01/2010 6 3 C'est faisable ? |
|
|
00
|
|
|
#4 |
![]() ![]() René MAROTInscription : octobre 2005 Messages : 5 479 ![]() |
Tu pourrais simplement utiliser la fonction DCount(), l'équivalent de la requête Count que j'ai écrite. En donnant comme critère la date de début, de fin et le type PT, cela devrait faire l'affaire.
Regarde l'aide de DCount() en VBA pour la façon de l'utiliser. A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs. |
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2010 Messages : 88 ![]() |
Merci marot_r,
J'ai trouvé un tutoriel de cafeine(http://cafeine.developpez.com/access...echerchemulti/) Malheureusement mon niveau ne me permet pas de "répliquer" ce type de code. Je produit des requetes uniquement en mode création et je ne sais pas comment, ni où, insérer ces codes ? |
|
|
00
|
|
|
#6 |
![]() ![]() René MAROTInscription : octobre 2005 Messages : 5 479 ![]() |
Oui c'est bien mais un peu "Over Killing" pour ton problème.
Tu as juste à créer un champ calculé dans ta requête dont la valeur va être quelque chose comme : Code :
DCount("Statut";"NomTaTable";[prmDateDebut] & "<=[DateStatut] and [DateStatut]<=" & [prmDateFin] & " and [Statut]=""PT"") En changeant PT par T tu peux, sur le même principe, compter le nombre de jours travaillés entre deux dates. Note : Access va traduire Dcount() en français automatiquement. A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs. |
|
|
00
|
|
|
#7 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2010 Messages : 88 ![]() |
Merci marot_r,
Débutant je suis débutant je reste !!! J'ai tapé la ligne de code suivante dans la requête dans le "Champ": pour T00_calendrier :table avec date calendrier et statut (Date et Travaillé_pas_travaillé) T011_Cumul_lx03 :table avec l'ensemble des donnèes et les deux colonnes (Dern_entr et Date_extraction) Code :
compte: DCount("T00_Calendrier";"T011_Cumul_lx03"; [T011_Cumul_lx03]![Dern_entr] & "<=[T00_Calendrier]![Date] et [T00_Calendrier]![Date]<=" & [T011_Cumul_lx03]![Date_extraction] & " et [T00_Calendrier]![Travaillé_pas_travaillé] =""PT"") Tu vois quelque chose qui cloche ? |
|
|
00
|
|
|
#8 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2010 Messages : 88 ![]() |
PS :
J'ai un message d'erreur : "Une chaîne de l'expression entrée n'est pas valide. Une chaîne peut comporter jusqu'à 2048 caractères, y compris les guillemets initiaux et finaux." |
|
|
00
|
|
|
#9 |
![]() ![]() René MAROTInscription : octobre 2005 Messages : 5 479 ![]() |
Code :
compte: DCount("T00_Calendrier";"T011_Cumul_lx03"; [T011_Cumul_lx03]![Dern_entr] & "<=[T00_Calendrier]![Date] et [T00_Calendrier]![Date]<=" & [T011_Cumul_lx03]![Date_extraction] & " et [T00_Calendrier]![Travaillé_pas_travaillé] =""PT""")
A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs. |
|
|
00
|
|
|
#10 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2010 Messages : 88 ![]() |
Aïe aïe aïe !!!
Il me met "#Erreur" Et quand je clique sur la case erreur : Erreur de synthaxe (opérateur absent) dans l'expression << Code :
22/07/2011 <=[T00_Calendrier]![Date] et [T00_Calendrier]![Date]<=26/01/2012 et [T00_Calendrier]![Travaillé_pas_travaillé]="PT" C'est quoi le problème ? Le format date ? |
|
|
00
|
|
|
#11 |
![]() ![]() René MAROTInscription : octobre 2005 Messages : 5 479 ![]() |
Essaye
Code :
compte: DCount("T00_Calendrier";"T011_Cumul_lx03"; [T011_Cumul_lx03]![Dern_entr] & "<=[T00_Calendrier]![Date] and [T00_Calendrier]![Date]<=" & [T011_Cumul_lx03]![Date_extraction] & " and [T00_Calendrier]![Travaillé_pas_travaillé] =""PT""")
A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs. |
|
|
00
|
|
|
#12 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2010 Messages : 88 ![]() |
Je viens d'essayer le code
Code :
"l'expression entrée comme paramètre de requête est à l'origine de l'erreur suivante: "L'objet ne contient pas d'objet Automation "T00_Calendrier"" Qu'est ce que cela veut dire ? |
||
|
|
00
|
|
|
#13 |
![]() ![]() René MAROTInscription : octobre 2005 Messages : 5 479 ![]() |
Peux-tu poster les noms et la structure des tables impliquées ?
A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs. |
|
|
00
|
|
|
#14 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2010 Messages : 88 ![]() |
Désolé mais je n'arrive pas à poster mes tables. J'ai éssayé d'envoyer mon projet mdb mais il me "jète" malgrè une grosse cure d'amégrissement.
Comment fait-on ? |
|
|
00
|
|
|
#15 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2010 Messages : 88 ![]() |
J'éssaie avec du pdf...Présentation_pour_marot_r.pdf
|
|
|
00
|
|
|
#16 |
![]() ![]() René MAROTInscription : octobre 2005 Messages : 5 479 ![]() |
Code :
compte: CpteDom("Travaillé_pas_travaillé";"T00_Calendrier";[T011_Cumul_lx03]![Dern_entr] & "<=[T00_Calendrier]![Date] and [T00_Calendrier]![Date]<=" & [T011_Cumul_lx03]![Date_extraction] & " and [T00_Calendrier]![Travaillé_pas_travaillé] =""PT""")
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs. |
|
|
00
|
|
|
#17 |
![]() ![]() René MAROTInscription : octobre 2005 Messages : 5 479 ![]() |
Au fait tu peux calculer avec une requête les valeurs de Jour, Semaine, mois et année à partir de Date
en utilisant : Jour : Format([date];"jjj") Semaine : Format([date];"aaaa\-ww";2;1) Mois : Format([date];"aaaa\-mm") Annee : Year([date]) Tu n'es donc pas obligé d'avoir des champs dans ta table pour cela. Il est recommandé de ne pas stocker le résultat de calcul dans une table SAUF si tu as des problème de performance. Les calculs devraient toujours, dans la mesure du possible, être fait dans des requêtes. Ta structure de table pourait être : T00_Caldendrier : [DateCalendrier], type DateHeure, clef primaire [EstTravaille], Type booléen (champ pouvant prendre seulement 2 valeurs : vrai ou faux). Note que le booléen te limite à deux choix et que ta solution est très bonne si tu peux avoir plus de deux choix comme par exemple (Travaillé, Férié, Pas travaillé). Autre remarque, il semblerai que tu n'ai pas défini de clef primaire sur ta table T011_Cumul_lx03. C'est généralement recommandé d'avoir une clef primaire sur une table car cela permet des jointures plus efficaces. Je t'invite aussi à créer des relations entre tes tables au fur et à mesure de ton développement même si tu as très peu de tables, les ajouter à postériori peut s'avérer vraiment long et pénible. A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs. |
|
|
00
|
|
|
#18 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2010 Messages : 88 ![]() |
Un grand merci M.Marot.
En effet ma table date est un peu "lourde", je vais y remédier. Pour la clé j'ai toujours été échaudé par les clés qui sont restrictives !! Je fais des ajouts via requête "sans correspondance" sachant que je n'ai pas d'info unique. En même temps je pourrais en créer une clé en concaténant la date du jour avec mon "concaténer" Actuel, mais je me demande si, quand je vais faire une requête ajout et que access va vérifier chaque ligne pour voir si il n'y a pas de doublon cela risque d'être un peu long (une semaine d'extraction c'est plus de 600.000 lignes !!) A voir. Concernant le code Code :
compte: CpteDom("Travaillé_pas_travaillé";"T00_Calendrier";[T011_Cumul_lx03]![Dern_entr] & "<=[T00_Calendrier]![Date] and [T00_Calendrier]![Date]<=" & [T011_Cumul_lx03]![Date_extraction] & " and [T00_Calendrier]![Travaillé_pas_travaillé] =""PT""") No comprendo !! |
|
|
00
|
|
|
#19 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2010 Messages : 88 ![]() |
Boujour Marot,
J'ai trouvé une solution sur le forum dans requêtes et SQL. C'est nico84. L'exemple que je lui avait donné était certainement plus clair quoi qu'il en soit dans mon exemple il m'a donné cette ligne de code. Code :
(select count(*) from T00_calendrier where Travaillé_pas_travaillé='PT' and Date>=T011_Cumul_lx03.Dern_entr and Date<=T011_Cumul_lx03.Date_extraction) |
|
|
00
|
|
|
#20 | |
![]() ![]() René MAROTInscription : octobre 2005 Messages : 5 479 ![]() |
Citation:
Tu vas peut-être avoir des problèmes de place et il serait raisonnable de regarder du côté d'une GROSSE BD comme Oracle, MS-SQL Server ou DB2. A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs. |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com