Requete pour faire une somme

icomicar Messages postés 76 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 28 janvier 2015 - 24 mai 2007 à 23:59
icomicar Messages postés 76 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 28 janvier 2015 - 27 mai 2007 à 01:17
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

chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
25 mai 2007 à 01:38
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.)













0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
25 mai 2007 à 08:46
Bravo Chaibat05, grace a toi, les heurs de colles vont couler à flots, LOL.
0
icomicar Messages postés 76 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 28 janvier 2015
25 mai 2007 à 23:13
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é ??
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
26 mai 2007 à 00:55
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.













0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
26 mai 2007 à 02:32
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 :-)


 


 
0
icomicar Messages postés 76 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 28 janvier 2015
27 mai 2007 à 01:17
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é ??
0