Requete pour faire une somme

Signaler
Messages postés
76
Date d'inscription
lundi 26 juin 2006
Statut
Membre
Dernière intervention
28 janvier 2015
-
Messages postés
76
Date d'inscription
lundi 26 juin 2006
Statut
Membre
Dernière intervention
28 janvier 2015
-
Salut les amis
voila je realise une application en vb6.et je voudrais faire la sommes de toutes les heures d'abscence pour une classe d'eleves pendant une periode donnée.Et afficher les resultats sous forme de liste a deux colonnes"eleves"" somme des heures".
pour un seul eleve je l'ai fais comme ceci
pdat = Combo2(0).Text
ddat = Combo2(1).Text
pdat = Format(pdat, "dd/mm/yyyy")
ddat = Format(ddat, "dd/mm/yyyy")

Set rs = daoDB36.OpenRecordset("select sum(absc) as total from abscence where annsc='" + Trim(Combo1(2)) & _
 "'and ninsc='" + Trim(Combo1(1)) & _
"' and dat between datevalue('" & pdat & "')and datevalue('" & ddat & "')  ")
et ca marche.Toutefois  si vous avez des suggestions n'hésitez surtout pas a corriger.
Mais pour faire cette operation pour toute la classe !!!????.Aider et merci
Qui a preceder l'autre l'homme ou la penseé ??

6 réponses

Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Bonsoir,
Voici comment moi j' ai fait dans un cas similaire :


*ABSENCES       *INSCRITS    
IdDate                IdEleve      
IdEleve               IdClasse                 
De
A


IdDate=Champ Date "jj/mm/aaaa"
De  et A  =ChampS Date/heure Format "hh:mn"


Requete sur _ABSENCES


IdDate        _Jour   _Mois   _Annee   IdEleve   IdClasse    _nbMinutes
21/05/2007       21        05       2007      105        Ce1A          120
21/05/2007       21        05       2007      107        CE1A            90
23/05/2007       23        05       2007      315        CE2C          240
25/05/2007       25        05       2007      227        CE2B            60


Champs générés donc :
_Jour    = Jour(IdDate)
_Mois    = Mois(IdDate)
_Annee  = Annee(IdDate)


_nbMinutes=((Heure(A)*60) + Minutes(A)) - ((Heure(De)*60) + Minutes(De))

A partir de là tu peux avoir tout ce que tu veux en faisant des regroupements
et selon différents critères...
Pour les nbMinutes tu peux les reconvertir par la suite au format hh:mn ,
soit au moment du regroupement soit par lasuite (juste pour l' affichage.)













Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
3
Bravo Chaibat05, grace a toi, les heurs de colles vont couler à flots, LOL.
Messages postés
76
Date d'inscription
lundi 26 juin 2006
Statut
Membre
Dernière intervention
28 janvier 2015

Salut tout le monde
J'ai trouve comment faire .Mais c'est une vraie entorse.
Voila j'ai d'abord creer une table abscence et sa copie abscence1
Set rs2 = daoDB36.OpenRecordset("abscence1")
ensuite j'ai selectionné les noms des eleves d'une classe
Set rs = daoDB36.OpenRecordset("select distinct ncomplet from abscence")
et puis j'ai utilise une variable pour stocker les nom l'un apres l'autre
et en même temps passer l'enrengistrement dans abscence1,.la table abscence1 est prealablement vider par le code suivant
Do Until rs2.EOF
rs2.Delete
rs2.MoveNext
Loop
ensuite viens ce code
Dim var As String
rs.MoveFirst
Do Until rs.EOF
var = rs!ncomplet
Set rs1 = daoDB36.OpenRecordset("select sum(absc)as total from abscence where annsc='" + Label2.Caption & _
"'and ncomplet='" + var + "'")
With rs2
.AddNew
rs2!ncomplet = var
rs2!total = rs1!total
.Update
End With
rs.MoveNext
Loop
Set Data2.Recordset = rs2
le data2 est lié a un dbgrid.Alors s'il vous plait si vous avez des idées plus simple .Merci
Qui a preceder l'autre l'homme ou la penseé ??
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Salut,
Des idées ? oui bien sûr ...
Simples ? aussi ...,
mais pas sur la base du compliqué.


Concernant la pensée, ce qui est sûr c' est qu' elle prècéde le ...traitement.













Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
une façon comme une autre de me racheter ...


Voila j'ai d'abord creer une table abscence et sa copie abscence1
>Au lieu de ça, crées la requête que je t' ai proposé


Ensuite tu veux quoi ?


Cumul  des absences de tous les élèves de toute  une classe
entre deux dates?


dDebut=CDate(Combo2(0).Text)
dFin= CDate(Combo2(1).Text)


"SELECT [_ABSENCES].IdClas, [_ABSENCES].IdEleve, " & _
"Int(Sum([_ABSENCES]![_nbMinutes])/60) AS _HCumul, " & _
"Sum([_ABSENCES]![_nbMinutes])-([_HCumul]*60) AS _MCumul " & _
"FROM _ABSENCES " & _
"GROUP BY [_ABSENCES].IdClas, [_ABSENCES].IdEleve WHERE _Jour >=" & Day(dDebut & _
" AND _Mois >= " & Month(dDebut) & " AND _Jour <=" & Jour(dFin) & _
" AND _Mois <= " & Month(dFin) & ";"


Tu peux donc ouvrir un rs sur cette expression.
Set rs1 = daoDB36.OpenRecordset(sQuery,dbOpenSnapshot)
Set dbgrid.RecordSource= rs1


NB:
1° Bien qu' une année soit à cheval entre deux années, la probabilité d' avoir
deux mois de Mai est n' est strictement pas envisageable.C' est pourquoi on ne
teste pas sur l' année.A moins de fourrer toutes les années dans une même et unique BD.


2° Pourquoi je l' ai fait avec Jour et Mois au lieu de IdDate Beetwen...
Parce que personnellement ça me sert d' avoir des récapitulatifs
par jour et par mois. C' est essentiel quand on veut avoir des En-Tetes de groupe dans des etats.




PS: Nicko, j' ai l' impression que c' est moi qui s' est tapé une heure de colle :-)


 


 
Messages postés
76
Date d'inscription
lundi 26 juin 2006
Statut
Membre
Dernière intervention
28 janvier 2015

Salut : J'ai beau essayer de'integrer ta requete dans mon application avec les modifications necessaires,en vain ca me donne une erreur de syntaxe comme quoi un opérateur est abscent.Lequel ?? allez savoir.
en fait la clause group by permet de parcourir l'enregistrement en executant la requete ? c'est ca ?.


Precisions les abcences sont comptées en heures entieres 1,2,3....pour un semestre durant une années scolaire.il n'ya q'une selue BD.  

Qui a preceder l'autre l'homme ou la penseé ??