Recherche par date par requete SQL (ACCESS)

Résolu
el_teedee Messages postés 497 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 13 juillet 2015 - 9 août 2004 à 12:52
el_teedee Messages postés 497 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 13 juillet 2015 - 9 août 2004 à 15:39
Lut,

faisons simple :)

J'ai une table Devis qui contient une date ou un devis a été réalisé. Au début, ce champ était en "texte" pour raison de simplicité, et ma recherche par date marchait niquel. Jusqu'à ce que je veuille rajouter les critères suivants (ce matin :/ ):

-> rechercher avant la date
-> rechercher la date exacte
-> rechercher après la date

Mon champ étant en texte, la recherche renvoyait des resultats érronés, à savoir par exemple:
je recherche AVANT le 05.08.2004, il ne me renvoit pas toutes les dates du mois de juillet XX.07.2004. Ceci venant du fait que le champ est en texte.

Bon, je décide de passer la propriété du champ en date, (normal), mais là, des que je lance ma requete, il me fait une erreur comme quoi je fais une erreur de syntaxe.

J'a recopié les infos du tutorial ici (http://www.vbfrance.com/tutorial.aspx?id=9), je fais donc comme suit :

If Option11.Value = -1 Then
    r3 = "[Devis]<" & "#" & Text_Devis.Text & "#"
ElseIf Option12.Value = -1 Then
    r3 = "[Devis]=" & "#" & Text_Devis.Text & "#"
Else
    r3 = "[Devis]>" & "#" & Text_Devis.Text & "#"
End If
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM FACTURE WHERE " & r3, dbOpenSnapshot)


au moment de l'erreur la requete vaut bien :
"SELECT * FROM FACTURE WHERE [Devis]=#09.08.2004#"

Si qqln sait d'ou ca vient ? -> moi :)
A voir également:

16 réponses

cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
9 août 2004 à 13:36
dans SQL , on peut utilisr DateValue

ex :

"Select *From Table1 Where Date = DateValue('"+trim(txtdate)+"');"

MSN : cyberscorp2004@msn.com
Qui s'y frotte, s'y pique .
3
cs_mguilhem Messages postés 69 Date d'inscription vendredi 27 février 2004 Statut Membre Dernière intervention 26 novembre 2005
9 août 2004 à 13:07
Salut !

Juste une petite question:
pourqoui utilises-tu des points comme séparateur pour une valeur date ?

Ne devrais-tu pas utiliser un slash plutôt ' / ' ?
"SELECT * FROM FACTURE WHERE [Devis]=#09/08/2004#"

Si c'est le cas, lors de la conversion des textes en date, y a pt^t eu un petit problème non?

Bye !
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
9 août 2004 à 13:27
Essayes ca :

If Option11.Value = -1 Then
r3 = "Devis <" & "#" & Format(Text_Devis, "mm/dd/yy") & "#"
ElseIf Option12.Value = -1 Thenr3 "Devis" & "#" & Format(Text_Devis, "mm/dd/yy") & "#"
Else
r3 = "Devis >" & "#" & Format(Text_Devis, "mm/dd/yy") & "#"
End If
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM FACTURE WHERE " & r3, dbOpenSnapshot)

Au fait les [] s'utilise que pour les nom de table composé Ex :
Nom Users

It@li@
0
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
9 août 2004 à 13:32
Je suis d'accord avec mguilhem.

Est ce que tu es sûr que le champs [Devis] est de type Date ???

si oui drôle de nom tu crois pas ;)

Moi pour tester les requêtes je fais :
debug.print "SELECT * FROM FACTURE WHERE " & r3
ensuite je fais un copier/coller du résultat (dans la fenetre execution) vers une nouvelle requete access et je lances.

MSN : cyberscorp2004@msn.com
Qui s'y frotte, s'y pique .
0

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

Posez votre question
el_teedee Messages postés 497 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 13 juillet 2015 9
9 août 2004 à 13:50
Oula, y'a du monde qui a posté le temps que je fasse mes petits essais. Mais je marque qd meme ma réponse, car je me suis fait chier à l'écrire :)

(réponse apres le post de mghuilhem)

lut,

>mguilhem : Les points sont les séparateurs par défaut. Ma textbox recoit par défaut la date du jour. Cette date est automatiquement écrite sous cette forme : jour.mois.année

j'ai essayé de remplacer les . par des /, ca marche. Je pense avoir trouvé qqch pour que ca marche, mais je pense pas que ce soit la bonne méthode :

1°) la textbox recoit la date du jour (par défaut), sous la forme jour.mois.année (cette textbox étant du type : date courte, c'est à dire, jour.mois.année)
2°) Je dois convertir les "." en "/"
3°) j'execute ma requete avec ma date sous cette forme donc : jour/mois/année

ca marche, mais c'est totalement débile. Je spécifie a ACCESS que ce champ est une date, que la textbox est une date. Il recoit la date par défaut avec des "." comme séparateur, et après il est pas capable de faire la recherche avec des "." ? ? ? Il faut les changer en "/" ? c koi ce délire ?

Si qqln a une explication ?

------------------------------------------------------------------------
> italia : format dd./mm/yy ne marche pas je crois, j'ai essayé entre temps, et ca renvoit quand meme dd.mm.yy
0
el_teedee Messages postés 497 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 13 juillet 2015 9
9 août 2004 à 13:59
Bon je viens de trouver une piste :

j'ai (quand meme) essayé ce que tu as marqué It@ :
r3 "Devis" & "#" & Format(Text_Devis, "mm/dd/yy") & "#"
ca donne :
"Devis =#08.09.04#"

Il n'y a pas d'erreur le recordset est bien effectué, cependant, les résultats sont faux car dans ma table, les dates ont ce format :
dd mm yyyy l'année est en 4 chiffres

lorsque j'essaye : r3 "Devis" & "#" & Format(Text_Devis, "dd/mm/yyyy") & "#"
ca donne :
""Devis =#09.08.2004#"

et bien la, ca plante: erreur de syntaxe :/
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
9 août 2004 à 13:59
chez moi ca marche !!!

reassayes

It@li@
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
9 août 2004 à 14:04
Alors :
r3 "Devis" & "#" & Format(Text_Devis, "dd/mm/yy") & "#"

en inversant les mm et les dd

????
ca devrait aller
It@li@
0
el_teedee Messages postés 497 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 13 juillet 2015 9
9 août 2004 à 14:11
Bon, alors voici les modif que j'ai fait :

pour rendre correct le format de la textbox, avant j'utilisais :
Text_Devis = Format$(Text_Devis, "dd.mm.yyyy")
j'ai remplacé par :
Text_Devis = Format$(Text_Devis, "dd.mm.yy")
Comme ca ca me marque 09.08.04

mes requetes sont bien :
If Option11.Value = -1 Then
    r3 = "Devis <" & "#" & Format(Text_Devis, "dd/mm/yy") & "#"
ElseIf Option12.Value = -1 Then    r3 "Devis" & "#" & Format(Text_Devis, "dd/mm/yy") & "#"
Else
    r3 = "Devis >" & "#" & Format(Text_Devis, "dd/mm/yy") & "#"
End If


ATTENTION : Ma table contient que des dates de ce type :
dd.mm.yyyy

Quand je clic sur AVANT 09.08.04 -> resultat 0
Quand je clic sur = 09.08.04 -> resultat 0 (normal, y'en a pas d'aujourd'hui)
Quand je clic sur APRES 09.08.04 -> resultat 71 (toutes les factures)

C le contraire que je devrais obtenir :/
0
el_teedee Messages postés 497 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 13 juillet 2015 9
9 août 2004 à 14:14
PS : j'ai essayé de changer les dates de ma table à la main de ce format dd.mm.yyyy -> dd.mm.yy (pour que la recherche et les données soit du meme format)

ca ne veut pas, des que je quitte la case, access remplace dd.mm.yy par dd.mm.yyyy, du fait du type du champ (date/heure)

que faire :-?
0
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
9 août 2004 à 14:23
si tu changes dans le panneau de configuration / option régionnal /Date / et tu mais séparateur "/" normalement dans access ca change en dd/mm/yyyy

MSN : cyberscorp2004@msn.com
Qui s'y frotte, s'y pique .
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 août 2004 à 14:29
el_teedee > tu dis 'dans ma table les dates ont ce format ....'
Non et non, si c'est bien un champ date, il n'a AUCUN format, c'est simplement un nombre flottant sur 64 bits et rien d'autre.
Ce que tu vois est une representation de ces nombres par Access (ou autre) mais rien de plus.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_mguilhem Messages postés 69 Date d'inscription vendredi 27 février 2004 Statut Membre Dernière intervention 26 novembre 2005
9 août 2004 à 14:31
Je pense que frop01 a trouvé la solution
0
el_teedee Messages postés 497 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 13 juillet 2015 9
9 août 2004 à 14:33
Bon, re, les gens :)

moi = :)

>frop01 : depuis le début, j'ai pas eu le temps de tester ca :
"Select *From Table1 Where Date = DateValue('"+trim(txtdate)+"');"
car j'étais parti sur mes tests, tu dois connaitre ça.

De plus, dès le début, tu m'as fait peut avec :
debug.print "SELECT * FROM FACTURE WHERE " & r3
C pour ca, je comprenais déjà plus ce que me racontais Itali@ :)

Mais la je viens de tester avec DateValue, et ben dis donc, c tis pas que ca marcherait nikel ? :)

Merci à tous....

Voilà donc tout ce que je fais :
If Option11.Value  = -1 Then
    r3 = "Devis < DateValue('" + Trim(Text_Devis) + "');"
ElseIf Option12.Value = -1 Then    r3 "Devis DateValue('" + Trim(Text_Devis) + "');"
Else
    r3 = "Devis > DateValue('" + Trim(Text_Devis) + "');"
End If

Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM FACTURE WHERE " & r3, dbOpenSnapshot)


et ma textbox est bien toujours de ce format : dd.mm.yyyy
grâce à :
Text_Devis = Format$(Text_Devis, "dd.mm.yyyy")
(ps : Text_Devis = Format$(Text_Devis, "dd/mm/yyyy") c'est la même chose)
0
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
9 août 2004 à 14:39
8-)

MSN : cyberscorp2004@msn.com
Qui s'y frotte, s'y pique .
0
el_teedee Messages postés 497 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 13 juillet 2015 9
9 août 2004 à 15:39
Pour clore le sujet, j'utilise ce type de requete avec 2 critères de date -> Devis , et Echeance

Dans mon cas, il ne faut donc pas utliser les ";" en fin de requete car sinon, quand j'ajoute mes bout de requete l'une à l'autre, cad r3 & r4, la syntaxe est fausse a cause des ";"

C'était juste pour dire que r3 = "Devis < DateValue('" + Trim(Text_Devis) + "')" ca marche ( sans ";")
et dans mon cas c ce qu'il me fallait :)
0
Rejoignez-nous