Recherche entre 2 dates dans mdb [Résolu]

Signaler
Messages postés
5
Date d'inscription
mardi 20 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2009
-
Messages postés
5
Date d'inscription
mardi 20 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2009
-
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

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
64
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") & "#"
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
64
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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
64
idem pour le coté 'entre deux date' :

"SELECT * FROM `courrier` WHERE `date` BETWEEN #1/5/2009# AND #4/24/2009#"
Messages postés
5
Date d'inscription
mardi 20 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2009

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 :(
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
64
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 ?
Messages postés
5
Date d'inscription
mardi 20 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2009

Helas oui, c'est pourquoi je ne comprend pas pourquoi cela ne fonctionne pas :(
Messages postés
5
Date d'inscription
mardi 20 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2009

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 ??????
Messages postés
5
Date d'inscription
mardi 20 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2009

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 ;)