Afficher le résultat d'une recherche entre deux dates dans MsFlexgrid

gladiator1024 Messages postés 65 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 1 février 2011 - 10 déc. 2010 à 14:30
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 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



rsventas.MoveNext
Loop
End If

16 réponses

Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
11 déc. 2010 à 14:38
Bonjour,

Quel est le type de données de ton champ Fencha. String ou Date.

Dans ton SELECT tu fais un savant mélange des 2.
Je te conseille fortement d'utiliser une comparaison sur des dates.

Calade
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
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.

Calade
0
gladiator1024 Messages postés 65 Date d'inscription vendredi 4 janvier 2008 Statut Membre Derniè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



rsventas.MoveNext
Loop
End If

Je suis Vraiment Désole Pour Le Dérangement
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
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
0

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

Posez votre question
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
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..
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
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.


Calade
0
gladiator1024 Messages postés 65 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 1 février 2011
14 déc. 2010 à 14:48
Il ya Des Vents en ma base de donnée mais le code que vous donnée
s'affiche
MsgBox "Aucun Reglement pour cette période"
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
14 déc. 2010 à 14:55
Alors ça veut dire que tu récupères quelque chose. Ton test

If Not rsventas.BOF Then
MsgBox "Aucun Reglement pour cette période"
Else
Set MSFlexGrid1.DataSource = rsventas

signifie que tu n'es pas sur BOF (c'est à dire AVANT le 1er enregistrement renvoyé), mets plutôt ceci:

If rsventas.EOF Then
MsgBox "Aucun Reglement pour cette période"
Else
Set MSFlexGrid1.DataSource = rsventas


Calade
0
gladiator1024 Messages postés 65 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 1 février 2011
14 déc. 2010 à 15:06
La Même Résultat
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
14 déc. 2010 à 15:12
Donne ton code ainsi corrigé et dis-moi exactement ce que tu signifies par "même résultat".


Calade
0
gladiator1024 Messages postés 65 Date d'inscription vendredi 4 janvier 2008 Statut Membre Derniè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



rsventas.MoveNext
Loop
End If

End Sub
0
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
14 déc. 2010 à 15:51
Re,

"Select * from ventas where fecha between " & CDate(Text1.Text) & CDate(Text2.Text)


Il manque le mot clé AND :

CDate(Text1.Text) & " AND " & CDate(Text2.Text)

Ensuite, tu dis que tu as le message "Aucun Reglement pour cette période" qui s'affiche?

L'expérience, c'est une connerie par jour, mais jamais la même..
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
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.


Calade
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
14 déc. 2010 à 15:58
Désolé, lolokun, je crois que nos messages se sont croisés.


Calade
0
gladiator1024 Messages postés 65 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 1 février 2011
14 déc. 2010 à 17:18
Je Fait Le Test avec AND Mais La Même Résultat
MsgBox "Aucun Reglement pour cette période"
0
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
14 déc. 2010 à 17:23
Pas de souci calade ;)

Gladiator, le pb vient de l'autre recordset!!!

L'expérience, c'est une connerie par jour, mais jamais la même..
0
Rejoignez-nous