Sinsitrus
Messages postés849Date d'inscriptionsamedi 11 juin 2005StatutMembreDernière intervention21 août 2015
-
10 janv. 2009 à 19:16
skyla
Messages postés60Date d'inscriptionsamedi 17 juin 2006StatutMembreDernière intervention19 octobre 2009
-
11 janv. 2009 à 09:40
Salut et joyeuses fêtes !
J'ai pu avoir dans ce code le montant total de dépenses journalier. Seulement, je n'arrives pas a le modifier pour avoir le montant du mois. Pouvez vous me donner un coup de main svp ?
SQL = " SELECT * FROM Depense WHERE cdate(Depense.Date)= '" & T_Date & "' and Depense.Date is not null "
DataReq.DatabaseName = App.Path & "\BaseDonnee.mdb"
DataReq.RecordSource = SQL
DataReq.Refresh
If Not (DataReq.Recordset.BOF And DataReq.Recordset.EOF) Then
DataReq.Recordset.MoveLast
DataReq.Recordset.MoveFirst
Do While Not DataReq.Recordset.EOF
M = M + Val(DataReq.Recordset!Montant)
DataReq.Recordset.MoveNext
DepenseMois.Caption = "Dépenses du Mois" & Format(M, "### ### ### ##0") & " F"
Loop
End If
Merci de m'aider
----------
OS : Windows XP SP3 et Vista 32
Platforme : VB 6.0 + SP6
Ok VB6.0 c'est pas net !
skyla
Messages postés60Date d'inscriptionsamedi 17 juin 2006StatutMembreDernière intervention19 octobre 2009 10 janv. 2009 à 20:30
Salut,
petite optimisation
Au lieu de faire une boucle sur le champ montant il serai préférable de sommer directement ce champ dans ta requette je pense
" SELECT * FROM Depense WHERE cdate(Depense.Date)= '" & T_Date & "' and Depense.Date is not null "
Donnera plutot:
" SELECT SUM(
Montant) AS TOT
FROM Depense WHERE cdate(Depense.Date)= '" & T_Date & "' and Depense.Date is not null "
Tu n'aura plus qu'a recuperer la valeur dans
DataReq.Recordset!TOT sans faire de boucle
En plus,tu selectionne ici uniquement le champs que tu as besoin au lieu de * et ne recuperer Montant
Maintenant concernant La selection pour le mois uniquement;
SELECT SUM(
Montant) AS TOT
FROM Depense WHERE MONTH(cdate(Depense.Date))= '" & MONTH(T_Date) & "' and Depense.Date is not null "
Ramene la somme pour le mois
Teste et dis moi si ca t'aide???
skyla
Messages postés60Date d'inscriptionsamedi 17 juin 2006StatutMembreDernière intervention19 octobre 2009 10 janv. 2009 à 22:21
De rien,et pour info tu peux aussi remplacer Month() par les fonctions standard d'Access pour les dates (Year par exemple pour avoir la somme de l'année...),A toi juste d'imaginer les requetes qui peuvent t'être utiles.
a+ sur vbFrance
S!
[mailto:Sk@yL Penser reponse acceptée pour les autres]<sub>
</sub>
Vous n’avez pas trouvé la réponse que vous recherchez ?
If Not (DataSQ.Recordset.BOF And DataSQ.Recordset.EOF) Then
DataSQ.Recordset.MoveLast
DataSQ.Recordset.MoveFirst
Do While Not DataSQ.Recordset.EOF
M = M + Val(DataSQ.Recordset!Montant)
DataSQ.Recordset.MoveNext
DepenseMois.Caption = "Dépenses du mois" & Format(M, "### ### ### ##0") & " F"
Loop
End If
Si je change une des date de 2009 en 2008 et la requête en :
SQ = " SELECT * FROM Depense WHERE MONTH(cdate(Depense.Date))= '" & Month(T_Date) & "' and Depense.Date is not null "
J'obtiendrai 500 ce qui fera allusion à XX/01/XXXX
Il comptera le mois mais sans considérer l'année.
Dans votre requête, si je compile à :
SQ = "
SELECT
SUM(Montant) AS TOT FROM Depense WHERE MONTH(cdate(Depense.Date))= '"
& Month(T_Date) & "' and Depense.Date is not null
Il fonctionnera pour les 200 mais par pour le calcul qu'on veux.
Si j'enlève le L du SQL, J'obtiendrai une erreur :
Élément non trouvé dans cette collection à la ligne
M = M + Val(DataSQ.Recordset!Montant)
Merci et j'espère que je ne suis pas trop bavard :p
skyla
Messages postés60Date d'inscriptionsamedi 17 juin 2006StatutMembreDernière intervention19 octobre 2009 11 janv. 2009 à 09:40
Salut,
Désolé de pas avoir vite repondu,le marchand de sable est vite passé la veille
Pour les erreurs,je vois plusieurs cas possibles:
1- La requette que je tai remise hier te ramene en realité 1 seul champ TOT ,donc tu ne peux pas l'assigner a ton tableau(Dategrid dans ton cas je pense),bien entendu il ne pourra pas aussi trouvé l'élement
DataSQ.Recordset!Montant.Tu peux taper cette requette directement dans l'editeur de requette,et tu comprendra mieux.
2-Il faut que tu ajoute la condition d'année aussi comme on l'a fait pour le mois,pour qu'il te ramene la somme du mois de l'année en cour donc la requette deviendra:
SELECT SUM(
Montant) AS TOT
FROM Depense WHERE MONTH(cdate(Depense.Date))= '" & MONTH(T_Date) & "' and
YEAR(cdate(Depense.Date))= '" & YEAR(T_Date)
AND Depense.Date is not null"
3-Mais attention,si ton champ
Depense.Date est de type DATE,alors c'est des # qu'il faudrat utiliser pour comparer les dates et non des ' pour encadrer l'égalité,et plus alor besoin d'utiliser CDATE cote ACCESS.Ici on utilse MONTH qui ramene un entier,alors toujours pas de ' et on ne met rien autour.on aura alors
SELECT SUM(
Montant) AS TOT
FROM Depense WHERE MONTH(Depense.Date)=" & MONTH(T_Date) & " and
YEAR(cdate(Depense.Date))=" & YEAR(T_Date) &
" AND Depense.Date is not null"
Cette requette tu dois l'executer et recuperer imediatemment le resultat sans l'assigner au tableau.Si tu ne sais pas t'y prendre previens moi je te montrerai comment faire;
4-IMPORTANT: Access a la facheuse habitude de renverser le format de date,et de prendre les jours pour des mois et l'inverse.Donc ta variable
T_Date devrait plutot etre:
dim
T_Date as date
T_Date=format(Date,"mm/dd/yyyy")
Essai et tien moi au courant,a +