Recherche entre 2 dates dans mdb

Résolu
boudiou1 Messages postés 5 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 27 avril 2009 - 24 avril 2009 à 15:17
boudiou1 Messages postés 5 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 27 avril 2009 - 27 avril 2009 à 11:42
Bonjour tout le monde. Je deviens fou. Je tente de recuperer des données entre 2 dates via un MonthCalendar et j''en perd mon latin :( Pour etre précis, je cherche dans un champ de  table access au format Date avec la requete suivante :

Private
Sub Button8_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles Button8.Click

Dim startdate
As
String

Dim enddate
AsStringstartdate Me.MonthCalendar1.SelectionRange.Startenddate

Me.MonthCalendar2.SelectionRange.StartMsgBox(startdate)

MsgBox(enddate)

Connexion =

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Matable.mdb"ConnexionOLE.ConnectionString = Connexion

da =

New OleDbDataAdapter(
"Select * from courrier where [date] = ('" & startdate &
"')", ConnexionOLE)ds =

New DataSet()da.Fill(ds,

"mytable")dv = ds.Tables(

"mytable").DefaultViewDataGridView1.DataSource = dv

dv.AllowEdit =

True

End
Sub

Je me retrouve avec le message d'erreur suivant : Type de donnée incompatible dans l'expression du critere
Aux vues des données du débogeur, il semble que ce soit un probleme de format de date. En efftet ma variable startdate prend bien la valeur saisie(par exemple 05/01/2009), par contre Me.MonthCalendar1.SelectionRange.Start
prend la valeur #1/5/2009#. Ce qui est bizarre c'est que ma requete select semble envoyer le bon format (soit 05/01/2009, verifié par le msgbox). J'ai essayé de déclarer mes variables en Date au lieu de String et j'ai le meme soucis. J'avoue que je cale. Heeeeeeeeeeeeeeelp

8 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
27 avril 2009 à 11:23
je te l'ai dit plus haut...


pour selectionne le 5 janvier.
ça, ça fonctionne (je ne t'apprend rien) :
Select * from courrier where [date] = #1/5/2009#

en recréant la chose avec ta date Stardate, tu tentes, bizarrement
Select * from courrier where [date] = 05/01/2009
Select * from courrier where [date] = (05/01/2009)
Select * from courrier where [date] = ('05/01/2009')

en effet, tu ne précise pas de formatage, ca utilise donc tes parametres regionnaux.

pourquoi ne pas utiliser, comme il se doit des dièses # pour délimiter ta date ?
pourquoi ne pas formater ta date comme il se doit: MM/DD/YYYY (ou yyyy-MM-dd, souvent plus lisible)

allez, je te mache encore un peu plus la chose...

"SELECT * FROM `courrier` WHERE `date`=#" & StartDate.ToString("yyyy-MM-dd") & "#"
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 avril 2009 à 15:23
encore et toujours les memes questions sur les Dates et le SQL...

ce genre de question qui tombe deux à trois fois par semaine...

SQL n'en a rien a carer des regional settings
une date, pour lui, c'est MM/DD/YYYY
et ca s'encadre avec des #

point barre.


donc, on fait pas :

"Select * from courrier where [date] = ('05/01/2009')"
mais bien
"Select * from courrier where [date] = #1/5/2009#"

allez, un peu de lecture
http://blogs.codes-sources.com/renfield/archive/2009/04/14/param-tres-r-gionnaux-en-g-n-ral-et-avec-vb6.aspx
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 avril 2009 à 15:24
idem pour le coté 'entre deux date' :

"SELECT * FROM `courrier` WHERE `date` BETWEEN #1/5/2009# AND #4/24/2009#"
0
boudiou1 Messages postés 5 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 27 avril 2009
24 avril 2009 à 16:00
Réponse rapide :) j'ai deja testé en passant ces variables de la facon dont tu cites mais j'ai toujours le meme message d'erreur :(
0

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

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 avril 2009 à 16:08
tu as bien formatté tes dates avant de transmettre l'info ?

tu as vérifié la requete obtenue ?
conforme a ce que je t'indique ?

tu as testé en mettant temporairement la requete en dur ?
0
boudiou1 Messages postés 5 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 27 avril 2009
24 avril 2009 à 21:40
Helas oui, c'est pourquoi je ne comprend pas pourquoi cela ne fonctionne pas :(
0
boudiou1 Messages postés 5 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 27 avril 2009
27 avril 2009 à 11:06
bon, alors j'ai testé en saisissant en dur une date dans ma requete, a savoir par exemple




Select * from courrier where [date] = #1/5/2009#

Là tout fonctionne nickel. Le blem vient de la facon dont est transmise ma variable
Voici le code modifié et qui fonctionne avec la variable en dur :
Dim startdate
As
Date
startdate =
Me.MonthCalendar1.SelectionRange.Start     (m'indique bien par exemple #1/5/2009# pour une date saisie le 5 janvier 2009 dans mon monthcalendar)
Connexion =
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Courrier.mdb"
ConnexionOLE.ConnectionString = Connexion

Le probleme est dans mon select. mais ou ???
J'ai essayé ces d iverses requetes sans succes, c'est à dire sans message d'erreur mais sans aucun enregistrement trouvé

da =
New OleDbDataAdapter(
"Select * from courrier where [date] = " & startdate &
"", ConnexionOLE)
ou encore
da =
New OleDbDataAdapter(
"Select * from courrier where [date] = (" & startdate &
")", ConnexionOLE)
et
da = New
OleDbDataAdapter(
"Select * from courrier where [date] = ('" & startdate &
"')", ConnexionOLE)




Je pense que je commets une erreur de syntaxe mais laquelle ??????
0
boudiou1 Messages postés 5 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 27 avril 2009
27 avril 2009 à 11:42
Tu as raison, je suis une bille !!!!! j'avais testé ce type de requete la semaine dernière mais en omettant les # !!!!
tout est OK maintenant.
Un grand merci à toi ;)
0
Rejoignez-nous