Afficher le résultat d'une recherche entre deux dates dans MsFlexgrid
gladiator1024
Messages postés65Date d'inscriptionvendredi 4 janvier 2008StatutMembreDernière intervention 1 février 2011
-
10 déc. 2010 à 14:30
lolokun
Messages postés1241Date d'inscriptionmardi 10 octobre 2006StatutMembreDernière intervention27 août 2013
-
14 déc. 2010 à 17:23
Bonjour le Forum et bonne journée
Pour pouvoir afficher le résultat d'une recherche entre deux dates dans MsFlexgrid
j'ai fait un code
If Text1 = "" Then End
Text1 = Format(Text1, "dd/mm/yyyy")
If Text2 = "" Then End
Text2 = Format(Text2, "dd/mm/yyyy")
Set db = New ADODB.Connection
'rsventas.Open "ventas", db, adOpenStatic, adLockPessimistic
Set rs1 = New ADODB.Recordset
rs1 = "Select * from ventas where (fecha between >= #" & Format(Text1, "dd/mm/yyyy") & "#)And (fecha <= #" & Format(Text2, "dd/mm/yyyy") & "#)"
'rsventas.Open rs1, db, adOpenKeyset, adLockOptimistic, adCmdText
If Not rsventas.BOF Then
MsgBox "Aucun Reglement pour cette période"
Else
Set MSFlexGrid1.DataSource = rsventas
MSFlexGrid1.FormatString = "ID DE VENTA |CLIENTE |DNI |LOCALIDAD |MOVIL |FIJO |FECHA DE VENTA |HORA DE VENTAS|ESTADO |AGENTE |CERRADOR "
Do While Not rsventas.EOF
MSFlexGrid1.AddItem rsventas.Fields(0) & vbTab & rsventas.Fields(2) & vbTab & rsventas.Fields(3) & vbTab & rsventas.Fields(6) & vbTab & rsventas.Fields(4) & vbTab & rsventas.Fields(5) & vbTab
Calade
Messages postés1207Date d'inscriptiondimanche 20 avril 2003StatutMembreDernière intervention 4 juin 201610 14 déc. 2010 à 07:35
Bonjour,
Alors essaie comme ça:
rs1 = "Select * from ventas where fecha between " & Cdate(Text1.Text)) AND Cdate(Text2.text)"
- Between signifie déjà ENTRE, inutile donc d'y ajouter des opérateurs, ni même de répéter ton champ.
- La valeur ayant l'air d'être contenu dans un TextBox (j'espère que c'est ça ?), il faut le convertir en date par CDate() pour la comparaison. Evite d'utiliser les propriétés par défaut, cela rend le code moins lisible (donc Text1.Text).
- Ne formate pas non plus, la date est stocké en interne en Double et la comparaison se fera là-dessus avant d'être converti. De plus le format choisi ne convient pas DU TOUT à des comparaisons. Pour cela il faut Année/Mois/Jour.
gladiator1024
Messages postés65Date d'inscriptionvendredi 4 janvier 2008StatutMembreDernière intervention 1 février 2011 14 déc. 2010 à 14:23
Salut Calade
Voila La Solution Mais ça Marcahe Pas
Private Sub Command1_Click()
Set rs1 = New ADODB.Recordset
rs1 = "Select * from ventas where fecha between " & CDate(Text1.Text) And CDate(Text2.Text)
If Not rsventas.BOF Then
MsgBox "Aucun Reglement pour cette période"
Else
Set MSFlexGrid1.DataSource = rsventas
MSFlexGrid1.FormatString = "ID DE VENTA |CLIENTE |DNI |LOCALIDAD |MOVIL |FIJO |FECHA DE VENTA |HORA DE VENTAS|ESTADO |AGENTE |CERRADOR "
Do While Not rsventas.EOF
MSFlexGrid1.AddItem rsventas.Fields(0) & vbTab & rsventas.Fields(2) & vbTab & rsventas.Fields(3) & vbTab & rsventas.Fields(6) & vbTab & rsventas.Fields(4) & vbTab & rsventas.Fields(5) & vbTab
Calade
Messages postés1207Date d'inscriptiondimanche 20 avril 2003StatutMembreDernière intervention 4 juin 201610 14 déc. 2010 à 14:31
Désolé, j'ai oublié quelque chose. Le mot clé AND fait partie intégrante de la syntaxe SQL, donc ta requête devient:
rs1 = "Select * from ventas where fecha between " & Cdate(Text1.Text)) & " AND " & Cdate(Text2.text) (supprime les double-quotes de fin aussi).
Les majuscules ne sont pas obligatoires, mais j'ai pris l'habitude de mettre la syntaxe SQL en majuscules pour la différencier facilement du reste.
Maintenant si ça ne marche toujours pas, sois plus explicite. "Ca ne marche pas" ne veut rien dire. As-tu un message d'erreur, ton Recordset en sortie est-il vide, contient-il des données que tu ne veux pas...
Calade
Vous n’avez pas trouvé la réponse que vous recherchez ?
lolokun
Messages postés1241Date d'inscriptionmardi 10 octobre 2006StatutMembreDernière intervention27 août 20137 14 déc. 2010 à 14:36
Bonjour,
Ca ne marche pas, c'est un peu vague..Tu as un message d'erreur?
Je te conseille d'afficher par un msgbox ta requête avant de l'exécuter peut-être faut il rajoutner des "" entre ton AND.
Et d'ailleurs, il me semble que nulle part tu n'exécutes ta requête dans ce code...
Puis tu as 2 recordset, rs1 et rsventas?
L'expérience, c'est une connerie par jour, mais jamais la même..
Calade
Messages postés1207Date d'inscriptiondimanche 20 avril 2003StatutMembreDernière intervention 4 juin 201610 14 déc. 2010 à 14:47
Suite au message de lolokun, je viens de regarder ton code d'un peu plus près. Je m'étais focalisé sur ta requête SQL, mais effectivement tu n'exécutes pas rs1 et rsventas viens d'on ne sait où.
Enfin, faire un .AddItem sur un MSFlexGrid peut prendre énormément de temps si ton recordset est très peuplé. Tu as la propriété MSFlexGrid.DataSource qui fera cela beaucoup plus vite. Le code:
Set MSFlexGrid.DataSource = rs1 (il est possible que le contrôle MSFlexGrid ne soit pas "Data Aware" comme l'on dit, c'est à dire que la syntaxe que je viens de te donner ne fonctionne pas, dans ce cas prends le contrôle MSHFlexGrid(avec un H après MS). Lui il l'est.
gladiator1024
Messages postés65Date d'inscriptionvendredi 4 janvier 2008StatutMembreDernière intervention 1 février 2011 14 déc. 2010 à 15:45
Voila Tout LE Code
La Déclaration
Dim DB As New ADODB.Connection
Dim rsventas As New ADODB.Recordset
En Load
DB.Provider = "microsoft.jet.oledb.4.0;"
DB.Open App.Path & "\telepathos-fini.mdb"
rsventas.Open "ventas", DB, adOpenStatic, adLockPessimistic
En la Command De rechrche
Private Sub Command1_Click()
Set rs1 = New ADODB.Recordset
rs1 = "Select * from ventas where fecha between " & CDate(Text1.Text) & CDate(Text2.Text)
If rsventas.EOF Then
MsgBox "Aucun Reglement pour cette période"
Else
Set MSFlexGrid1.DataSource = rs1
MSFlexGrid1.FormatString = "ID DE VENTA |CLIENTE |DNI |LOCALIDAD |MOVIL |FIJO |FECHA DE VENTA |HORA DE VENTAS|ESTADO |AGENTE |CERRADOR "
Do While Not rsventas.EOF
MSFlexGrid1.AddItem rsventas.Fields(0) & vbTab & rsventas.Fields(2) & vbTab & rsventas.Fields(3) & vbTab & rsventas.Fields(6) & vbTab & rsventas.Fields(4) & vbTab & rsventas.Fields(5) & vbTab
Calade
Messages postés1207Date d'inscriptiondimanche 20 avril 2003StatutMembreDernière intervention 4 juin 201610 14 déc. 2010 à 15:57
OK
1ère chose, tu aurais du préciser dès le début que ta base était sous Access et NON SQL Server, les réponses ne sont pas forcément les mêmes.
2ème chose, il faut AUSSI que tu lises nos réponses, la requête telle que je te l'avais donné faisait mention de l'opérateur AND, apparemment il a sauté de la tienne.
3ème chose, toujours dans nos messages. Si tu obtiens "Aucun Reglement pour cette période" ce que tu n'a pas précisé, cela signifie qu'il semblerait que ta table "Ventas" est vide, mais de toute façon cela n'a rien a voir rs1 que tu n'exécutes toujours pas. Regarde bien ce problmème de 2 recordsets dont un (rs1) n'est jamais ouvert (exécuté) et dont l'autre (rsventas) devrait contenir ta table "ventas" entière et NON issue d'une requête.