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

Signaler
Messages postés
65
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
1 février 2011
-
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
-
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

Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
10
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
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
10
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
Messages postés
65
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
1 février 2011

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
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
10
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
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
6
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..
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
10
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
Messages postés
65
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
1 février 2011

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"
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
10
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
Messages postés
65
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
1 février 2011

La Même Résultat
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
10
Donne ton code ainsi corrigé et dis-moi exactement ce que tu signifies par "même résultat".


Calade
Messages postés
65
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
1 février 2011

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
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
6
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..
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
10
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
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
10
Désolé, lolokun, je crois que nos messages se sont croisés.


Calade
Messages postés
65
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
1 février 2011

Je Fait Le Test avec AND Mais La Même Résultat
MsgBox "Aucun Reglement pour cette période"
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
6
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..