Pb Requete SQL Access [Résolu]

Signaler
Messages postés
235
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
16 mai 2011
-
Messages postés
235
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
16 mai 2011
-
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

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

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

Rollerman
3
Merci

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

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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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
Merci

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

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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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
Merci

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

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

Messages postés
235
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
16 mai 2011
2
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 ;)
Messages postés
235
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
16 mai 2011
2
Voilà qui est intéressant Jack, je pense que je vais me pencher là-dessus à l'avenir, merci beaucoup pour ces explications :D

EvilGost [;)]