Pb Requete SQL Access

Résolu
EvilGost Messages postés 235 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 16 mai 2011 - 3 févr. 2006 à 10:24
EvilGost Messages postés 235 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 16 mai 2011 - 24 mai 2006 à 13:05
Bonjour,

j'attaque une base access via VB6 et j'ai un petit problème, ca ne fonctionne pas.
j'ai essayé ça:

DateFin correspond a un champ de type Date dans Access
SELECT * FROM Tbl WHERE 'DateFin' >= NOW()
la requete me retourne tout, y compris ceux dont la date est antérieur...

J'ai également essayé ceci:
SELECT * FROM Tbl WHERE 'DateFin' BETWEEN NOW() AND DATEADD("yyyy",50,NOW())
Cela génère une erreur, il me dit "trop peu de paramètres"

Je dois avouer que je sèche un peu et j'espère que vous pourrez m'aider.

En vous remerciant,

EvilGost [;)]

5 réponses

olixelle Messages postés 506 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 3 mars 2008 2
3 févr. 2006 à 11:29
requete = "SELECT * FROM Tbl WHERE DateFin >= '" & NOW() & "'"

SELECT * FROM Tbl WHERE DateFin BETWEEN NOW() AND DATEADD("yyyy",50,NOW())

Rollerman
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
3 févr. 2006 à 12:22
Salut
Rappel : Si DateFin a été définie en type DateGénérale dans ta table, il faut encadrer les valeurs avec des # et pas des ' :
SELECT * FROM Tbl WHERE DateFin >= #18/03/2005#

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
4 févr. 2006 à 16:17
Salut EvilGost
(manque un H à ghost, non ?)

Non, ce n'est pas dû à ton Access, c'est un des problèmes de travailler avec les dates.
On peut essayer de jongler avec les Format pour convertir nos dates à la française en date US.
On peut aussi, et c'est la solution que j'ai retenue, stocker dans la database non pas la date, mais sa représentation en secondes depuis une date fixe, par exemple, le 01/01/1970 qui correspond à l'an 0 de l'informatique.
Cette convertion date --> Long est facilitée par la fonction DateDiff :
varDateFormatLong = DateDiff("s", "01/01/1970", varDateFormatDateLocal)
Pour convertir un Long en Date, suffit d'utiliser DateAdd :
varDateFormatDateLocal = DateAdd("s", varDateFormatLong, "01/01/1970")
Il suffit donc de trannsformer le champ Date de ta database en type numérique long pour pouvoir stocker ta date en Long. Puisque la convertion se fera toujours en VB, les dates seront donc représentées tout le temps en tenant compte du format Local.
Comme il faudra à chaque fois faire appel à cette fonction qui est longue à écrire, il est préféreable d'en faire un Function :
Private Function ConvDateLong(ByVal maDate As Date) As Long
ConvDateLong = DateDiff("s", "01/01/1970", maDate))
End Function
Private Function ConvLongDate(ByVal monChiffre As Long) As Date
ConvLongDate = DateAdd("s", monChiffre, "01/01/1970")
End Function

Exemple (bidon) de syntaxe pour cette méthode :
sSQL = "Select * " & _
" From maTable " & _
" Where DateVisite Between " &
CStr(ConvDateLong(DateDebut)) & " And " & _
CStr(ConvDateLong(DateFin)) & _
"And DateAnniversaire < " & CStr(ConvDateLong(Now))
Et pour le dépouillement des résultats d'un RecordSet :
r = 0
With monRecordSet
Do While .EOF
monTextBox(r).Text = ConvLogDate(.Fields("DateVisite"))
.MoveNext
r = r + 1
Loop
End With

Mais, car il y a toujours un "mais", cette méthode à l'inconvénient de ne pas pouvoir afficher directement les dates de la database dans un TextBox par exemple, il faudra toujopurs passer par nos fonctions de convertion, donc adieu le "ADODC", vive le "ADODB + programmation"

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
3
EvilGost Messages postés 235 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 16 mai 2011 2
3 févr. 2006 à 14:35
Merci Jack, ca fonctionne
Merci à toi olixelle aussi, il y a un peu de vrai, mais j'avais essayé et ca ne fonctionnait pas pour moi.
mais je dois avoir un Access fourreux. en effet, il a fallu que j'inverse le mois et le jour pour que cela fonctionne (comme si mon access etait en anglais alors qu'il ne l'ai pas)
ex: SELECT * FROM Tbl WHERE DateFin >= #" & format(now, "mm/dd/yyyy hh:nn:ss) & "#"

J'aime pas trop ce genre de merdouille mais bon...

merci a vous deux ;)
0

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

Posez votre question
EvilGost Messages postés 235 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 16 mai 2011 2
24 mai 2006 à 13:05
Voilà qui est intéressant Jack, je pense que je vais me pencher là-dessus à l'avenir, merci beaucoup pour ces explications :D

EvilGost [;)]
0
Rejoignez-nous