Syntaxe requête sql pour recherche entre deux dates [Résolu]

Messages postés
18
Date d'inscription
vendredi 23 décembre 2011
Dernière intervention
17 février 2012
- - Dernière réponse : Renfield
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
- 1 févr. 2012 à 08:19
Bonjour à tous...
Malgré des recherches approfondies je n'ai pas trouvé de réponse.
J'ai deux TextBox contenant des dates, je souhaite récupérer leur contenus pour les insérer dans une requête SQL (pour faire une recherche de données qui seront comprises entre ces deux dates)requête qui alimentera ensuite un DataGridView.
J'ai récupéré les contenus comme suit:
Dim datedebut As String
datedebut = Format(TextBox1.Text, "dd/mm/yyyy")
Dim datefin As String
datefin = Format(TextBox2.Text, "dd/mm/yyyy")
Je ne trouve pas la syntaxe exacte de la requête, elle commence par:
SELECT * FROM MaTable WHERE Dates BETWEEN ... Je sèche ensuite
On comprendra que je suis débutant de chez novice... Merci pour votre indulgence...
Afficher la suite 

Votre réponse

20/25 réponses

Meilleure réponse
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
3
Merci
requete parametrée, un bon choix...

ca ote le soucis des injections SQL, formats, etc.



Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 98 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Renfield
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Bonjour,
je supposes que Dates est un champ de ta table ?
Essaye

"SELECT * MaTable WHERE Dates BETWEEN #" & datedebut & "# and #" & datefin & "#"

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
18
Date d'inscription
vendredi 23 décembre 2011
Dernière intervention
17 février 2012
0
Merci
Désolé, çà ne fonctionne pas, si je réduit la requête à:
"SELECT * FROM MaTable"
le DatagridView se remplit bien...
J'en déduit que c'est la requête qui n'est pas exacte ou un problème avec les contenus des TexBox et leur format.
Commenter la réponse de gardoulet
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Dates est-il bien un champ de ta table Matable ?
(car sinon, ma foi ...)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
et passe tes dates au format dd/mm/yyyy


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
2859
Date d'inscription
mardi 15 avril 2003
Dernière intervention
26 novembre 2013
0
Merci
Salut,

Dim datedebut As String = String.Format("{0:d}", TextBox1.Text) 
Dim datefin As String =  String.Format("{0:d}", TextBox2.Text) 

"SELECT * FROM MaTable WHERE Dates BETWEEN #" & datedebut & "# AND #" & datefin & "#"


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Commenter la réponse de Mayzz
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
Pas d'accord avec toi, Mayzz

String.Format("{0:d}"

tu joues avec une requete SQL non parametrée. Une chaine de cractère, donc.
Il faut donc utiliser un format de date le plus generique possible.

yyyy-mm-dd

me semble un bon compromis, qui presente l'avantage d'etre lisible par tout le monde, de n'importe quel coté de la Manche...

et surtout complètement compréhansible par le moteur SQL.
Pas de confusion possible entre le 4 Fevrier et le 2 Avril


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
Messages postés
18
Date d'inscription
vendredi 23 décembre 2011
Dernière intervention
17 février 2012
0
Merci
Oui Dates est bien un champ de MaTable.
Mes dates sont pourtant bien passées en "dd/mm/yyyy"

Comme ci après:

Dim datedebut As String
datedebut = Format(TextBox1.Text, "dd/mm/yyyy")
Dim datefin As String
datefin = Format(TextBox2.Text, "dd/mm/yyyy")
Commenter la réponse de gardoulet
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
Mauvais format...

Que te manque il en donc à la vue des différentes réponses que tu as eues

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
Messages postés
18
Date d'inscription
vendredi 23 décembre 2011
Dernière intervention
17 février 2012
0
Merci
Euréka!! j'ai trouvé
C'était mes lignes de déclaration de variables qui n'étaient pas correctes,
J'écrivais:
im datedebut As String
datedebut = Format(TextBox1.Text, "dd/mm/yyyy")
Dim datefin As String
datefin = Format(TextBox2.Text, "dd/mm/yyyy")
Alors qu'il fallait ajouter String avant Format comme çà:
im datedebut As String
datedebut = String.Format(TextBox1.Text, "dd/mm/yyyy")
Dim datefin As String
datefin = String.Format(TextBox2.Text, "dd/mm/yyyy")

Un grand merci, j'espère ne pas avoir été trop "boulet", à mon âge on comprends les choses moins vite
Commenter la réponse de gardoulet
Messages postés
2859
Date d'inscription
mardi 15 avril 2003
Dernière intervention
26 novembre 2013
0
Merci
@Renfield> tu as raison autant pour moi ^^

Dim datedebut As String = String.Format("{0:g}", TextBox1.Text)


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Commenter la réponse de Mayzz
Messages postés
18
Date d'inscription
vendredi 23 décembre 2011
Dernière intervention
17 février 2012
0
Merci
Dans la série, Le Boulet, le retour...
C'était trop beau,
En fait ça fonctionne si les dates saisies se situent dans une plage se trouvant dans l'année 2012, si je fait une sélection par ex du 01/11/2011 au 30/11/2011, les données affichées commencent à la première entrée de ma base (soit le 28/07/2011) et par contre s'arrêtent bien au 30/11/2011, j'ai testé avec d'autres plages de dates de 2011 et c’est toujours pareil, j'en perds mon latin (plustôt mon VB.NET) ...
Commenter la réponse de gardoulet
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Cela veut dire que tu cherches (question de format de date) non pas depuis le ler novembre, mais depuis le 11 janvier (et comme ton 1er enregistrement est daté du 28 juillet ...



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
J'avais bien dit de bien prendre un format de date qui ne fasse pas de doute pour le developpeur ni le moteur SQL ....

2012-01-31

pas d'ambiguité, pour personne...

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
Messages postés
18
Date d'inscription
vendredi 23 décembre 2011
Dernière intervention
17 février 2012
0
Merci
J'ai changé le format par yyyy/mm/dd, mais c'est pareil.

Si j'entre une plage de dates comprises entre par exemple le 15/01/2012 et le 19/01/2012 ça fonctionne bien, seules les données comprises dans cette plage s'affichent, si je le fait avec une plage de dates en 2011 ça coince.
Est-ce que ce ne serait pas un problème avec le nom du champs de ma base "Dates" ?
J'ai lu qu'il fallait éviter ce mot dans les bases de données, qui causaient parfois des problèmes.
Une recherche par plage de dates avec paramètres passés en variables est une chose courante, c'est curieux de ne pas trouver plus de discussions à ce sujet dans les forums...
Commenter la réponse de gardoulet
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
si je le fait avec une plage de dates en 2011 ça coince.

avec quels critères ? Et "ça coince" comment ?
en me rappelant que :
la première entrée de ma base (soit le 28/07/2011)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
et quel est le type/format exact donné au champ Dates de ta table ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
Quelle est la requete que tu utilises ?

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
Messages postés
18
Date d'inscription
vendredi 23 décembre 2011
Dernière intervention
17 février 2012
0
Merci
Alors pour ucfoutu:
Ça coince du fait que si j'entre une plage de dates par exemple du 01/11/2011 au 30/11/2011, les données sont affichées jusqu'à la date butoir 30/11/2011, mais que la première donnée commence à la première entrée de ma base qui est le 28/07/2011 et non le 01/11/2011.
Si j'entre une plage de dates cette année, tout fonctionne bien, par exemple entre le 17/01/2012 et le 19/012012, m'affiche uniquement les données comprises entre ce deux dates.

Le type/format donné au champ Dates dans ma base access est Date/heure

Pour Renfield :
Ma requête est: strSql = "Select * FROM MaBase WHERE Dates BETWEEN #" & datedebut & "# and #" & datefin & "#"
Les variables datedebut et datefin sont déclarées comme suit:
Dim datedebut As String
datedebut = String.Format(TextBox1.Text, "dd/mm/yyyy")
Dim datefin As String
datefin = String.Format(TextBox2.Text, "dd/mm/yyyy")

J'ai essayé avec le format "yyyy/mm/dd", c'est pareil
J'ai essayé avec: Dim datedebut As String = String.Format("{0:g}", TextBox1.Text) idem
Commenter la réponse de gardoulet
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Si tu continues à ne pas vouloir formater datedebut et datefin en "mm/dd/yyyy", en dépit de dit et redit plus haut, ma foi ...


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.