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

gardoulet 18 Messages postés vendredi 23 décembre 2011Date d'inscription 17 février 2012 Dernière intervention - 29 janv. 2012 à 16:04 - Dernière réponse : Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention
- 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 

25 réponses

Répondre au sujet
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 1 févr. 2012 à 08:19
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Renfield
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 29 janv. 2012 à 16:15
0
Utile
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
gardoulet 18 Messages postés vendredi 23 décembre 2011Date d'inscription 17 février 2012 Dernière intervention - 29 janv. 2012 à 17:57
0
Utile
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 29 janv. 2012 à 18:18
0
Utile
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 29 janv. 2012 à 18:19
0
Utile
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
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 30 janv. 2012 à 01:21
0
Utile
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
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 30 janv. 2012 à 07:47
0
Utile
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
gardoulet 18 Messages postés vendredi 23 décembre 2011Date d'inscription 17 février 2012 Dernière intervention - 30 janv. 2012 à 11:30
0
Utile
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
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 30 janv. 2012 à 11:33
0
Utile
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
gardoulet 18 Messages postés vendredi 23 décembre 2011Date d'inscription 17 février 2012 Dernière intervention - 30 janv. 2012 à 13:10
0
Utile
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
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 30 janv. 2012 à 15:08
0
Utile
@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
gardoulet 18 Messages postés vendredi 23 décembre 2011Date d'inscription 17 février 2012 Dernière intervention - 30 janv. 2012 à 17:39
0
Utile
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 30 janv. 2012 à 18:04
0
Utile
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
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 31 janv. 2012 à 04:46
0
Utile
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
gardoulet 18 Messages postés vendredi 23 décembre 2011Date d'inscription 17 février 2012 Dernière intervention - 31 janv. 2012 à 08:34
0
Utile
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 31 janv. 2012 à 08:38
0
Utile
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 31 janv. 2012 à 08:40
0
Utile
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
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 31 janv. 2012 à 11:20
0
Utile
Quelle est la requete que tu utilises ?

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
gardoulet 18 Messages postés vendredi 23 décembre 2011Date d'inscription 17 février 2012 Dernière intervention - 31 janv. 2012 à 11:35
0
Utile
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 31 janv. 2012 à 11:39
0
Utile
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.

Syntaxe requête sql pour recherche entre deux dates - page 2