EvilGost
Messages postés235Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention16 mai 2011
-
3 févr. 2006 à 10:24
EvilGost
Messages postés235Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention16 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.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
EvilGost
Messages postés235Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention16 mai 20112 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 ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?