Requete VB6

Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015 - 10 janv. 2009 à 19:16
skyla Messages postés 60 Date d'inscription samedi 17 juin 2006 Statut Membre Dernière intervention 19 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 !

6 réponses

Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
10 janv. 2009 à 19:19
Désolé j'ai oublié de mentionner ceci :







Depense(Date, Montant)






Private Sub Form_Load()
Dim SQL As String
Dim M As Currency
T_Date = Format(Now, "dd/mm/yyyy")
Ici mon code
End Sub
0
skyla Messages postés 60 Date d'inscription samedi 17 juin 2006 Statut Membre Dernière intervention 19 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???

[mailto:Sk@yL S]
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
10 janv. 2009 à 20:43
Salut !

Merci beaucoup, ça marche impec ^^
0
skyla Messages postés 60 Date d'inscription samedi 17 juin 2006 Statut Membre Dernière intervention 19 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>
0

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

Posez votre question
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
11 janv. 2009 à 02:12
Salut !

Merci encore pour ton aide. Seulement je viens de constater qu'il y a une erreur...

Je devrais normalement avoir 600 au total pour le mois.
Je n'ai que 200, ce qui dit qu'il ne calcul pas le mois mais l'entrée du jour...

Dim SQ As String

SQ = "



SELECT SUM(Montant) AS TOT FROM Depense WHERE MONTH(cdate(Depense.Date))= '" & Month(T_Date) & "' and Depense.Date is not null










"

DataSQ.DatabaseName = App.Path & "\BaseDonnee.mdb"
DataSQ.RecordSource = SQL
DataSQ.Refresh

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





"









DataSQ.DatabaseName = App.Path & "\BaseDonnee.mdb"

DataSQ.RecordSource = SQ L

DataSQ.Refresh

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
0
skyla Messages postés 60 Date d'inscription samedi 17 juin 2006 Statut Membre Dernière intervention 19 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 +

















 







<sup>
[mailto:Sk@yL


S


]
</sup>



<sub>


</sub>
0
Rejoignez-nous