Recherche par date par requete SQL (ACCESS) [Résolu]

el_teedee 498 Messages postés mercredi 7 juillet 2004Date d'inscription 13 juillet 2015 Dernière intervention - 9 août 2004 à 12:52 - Dernière réponse : el_teedee 498 Messages postés mercredi 7 juillet 2004Date d'inscription 13 juillet 2015 Dernière intervention
- 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 :)
Afficher la suite 

16 réponses

Meilleure réponse
cs_frop01 1356 Messages postés lundi 27 octobre 2003Date d'inscription 19 novembre 2008 Dernière intervention - 9 août 2004 à 13:36
3
Merci
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 .

Merci cs_frop01 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

cs_mguilhem 69 Messages postés vendredi 27 février 2004Date d'inscription 26 novembre 2005 Dernière intervention - 9 août 2004 à 13:07
0
Merci
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 !
cs_ITALIA 2169 Messages postés vendredi 20 avril 2001Date d'inscription 30 juin 2009 Dernière intervention - 9 août 2004 à 13:27
0
Merci
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@
cs_frop01 1356 Messages postés lundi 27 octobre 2003Date d'inscription 19 novembre 2008 Dernière intervention - 9 août 2004 à 13:32
0
Merci
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 .
el_teedee 498 Messages postés mercredi 7 juillet 2004Date d'inscription 13 juillet 2015 Dernière intervention - 9 août 2004 à 13:50
0
Merci
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
el_teedee 498 Messages postés mercredi 7 juillet 2004Date d'inscription 13 juillet 2015 Dernière intervention - 9 août 2004 à 13:59
0
Merci
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 :/
cs_ITALIA 2169 Messages postés vendredi 20 avril 2001Date d'inscription 30 juin 2009 Dernière intervention - 9 août 2004 à 13:59
0
Merci
chez moi ca marche !!!

reassayes

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

en inversant les mm et les dd

????
ca devrait aller
It@li@
el_teedee 498 Messages postés mercredi 7 juillet 2004Date d'inscription 13 juillet 2015 Dernière intervention - 9 août 2004 à 14:11
0
Merci
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 :/
el_teedee 498 Messages postés mercredi 7 juillet 2004Date d'inscription 13 juillet 2015 Dernière intervention - 9 août 2004 à 14:14
0
Merci
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 :-?
cs_frop01 1356 Messages postés lundi 27 octobre 2003Date d'inscription 19 novembre 2008 Dernière intervention - 9 août 2004 à 14:23
0
Merci
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 .
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 9 août 2004 à 14:29
0
Merci
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++
cs_mguilhem 69 Messages postés vendredi 27 février 2004Date d'inscription 26 novembre 2005 Dernière intervention - 9 août 2004 à 14:31
0
Merci
Je pense que frop01 a trouvé la solution
el_teedee 498 Messages postés mercredi 7 juillet 2004Date d'inscription 13 juillet 2015 Dernière intervention - 9 août 2004 à 14:33
0
Merci
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)
cs_frop01 1356 Messages postés lundi 27 octobre 2003Date d'inscription 19 novembre 2008 Dernière intervention - 9 août 2004 à 14:39
0
Merci
8-)

MSN : cyberscorp2004@msn.com
Qui s'y frotte, s'y pique .
el_teedee 498 Messages postés mercredi 7 juillet 2004Date d'inscription 13 juillet 2015 Dernière intervention - 9 août 2004 à 15:39
0
Merci
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 :)

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.