Date access vb

Signaler
Messages postés
66
Date d'inscription
mercredi 31 mars 2004
Statut
Membre
Dernière intervention
3 juin 2004
-
Messages postés
66
Date d'inscription
mercredi 31 mars 2004
Statut
Membre
Dernière intervention
3 juin 2004
-
Bonjour :

Je compare une data de ma base access à celle dans vb.
Cela marche avec le supérieur et inferieur, mais pas avec l'égalité.

Je pense que cela est due à l'heure et les min, mais pourtant j'ai formater les dates pour que le soft n'en prenne pas compte.

Voici mon code :
Data2.RecordSource "Select audit.date_audit from audit where format(audit.date_audit,'dd - mm - yyyy') #" & Format(DTPicker1.Value, "dd - mm - yyyy ") & "# ;"

Data2.Refresh


Si quelqu'un peu me dire ou est l'erreur

11 réponses

Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
Excuses mon ignorance, mais a quoi servent les # ??

sinon, il te suffit de vérifier les chaines renvoyées par ton Format(date_audit) et par le Format ( DTPicker) et de les comparer...
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
C'est mortel pour les performances ton procede. Une date est stockee en 64 bits flottant (double), fais une comparaison numerique.
>= jour AND < JrPlusUn

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
66
Date d'inscription
mercredi 31 mars 2004
Statut
Membre
Dernière intervention
3 juin 2004

Merci pour les réponses.

Renfield, je voudrai bien verifier la chaine renvoyé par le Format (date_audit) mais je ne sais pas comment faire :

J'ai essayé ceci mais ca ne marche pas :


Data2.RecordSource = "Select format(audit.date_audit,'dd - mm - yyyy') from audit"
data2.refresh

var_temp = Data2.RecordSource.Fields("date_audit") 


Mais il dit que le champ date audit n'existe pas.
Sais tu comment faire ?

( pour les # je croi qu'il faut entourer les champs date avec ceci pour les requete access )

BruNews, merci de ta suggestion, mais cela donne le même problème, il va aussi sur le jour suivant ( a cause de heure min je pense ). Ma requette donne ceci :

   Data2.RecordSource = "Select audit.date_audit, sujet_audit from audit where format(audit.date_audit,'dd - mm - yyyy') > #" & Format(DTPicker1.Value - 1, "dd - mm - yyyy ") & "# and format(audit.date_audit,'dd - mm - yyyy') < #" & Format(DTPicker1.Value + 1, "dd - mm - yyyy ") & "# ;"


Merci
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
J'abonde dans le sens de BruNews ;) sur les cycles que cela doit prendre....

C'est normal qu'il te dise ne pas connaitre le champs audit....
car il n'existe pas !!! Il te faut nommer le champ créé

Data2.RecordSource = "Select format(audit.date_audit,'dd - mm - yyyy') as date_audit from audit"
data2.refresh
Messages postés
66
Date d'inscription
mercredi 31 mars 2004
Statut
Membre
Dernière intervention
3 juin 2004

Je ne comprend pas pourquoi cela doit prendre beaucoup de cycle ( mais bon, ce n'est pas grave, la requete n'est executé qu'une seule foi )

J'ai regardé ce que cela sort des deux cotés, cela sort exactement la même chose, mais quand il les compares, il dit que c'est différents.
Merci si vous avez la réponse
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
je trouve étrange tes comparaisons....

pourquoi ne formattes tu pas tes données sous la forme 'YYYYMMDDNNSS'

bref, on est pas plus avancés ;)
Messages postés
66
Date d'inscription
mercredi 31 mars 2004
Statut
Membre
Dernière intervention
3 juin 2004

Bon, j'ai trouvé à force de bidouillage.

Vu que vous critiquié déja les cyles que ca prennait, la ca va etre pire :o) mais bon, ca marche

ma solution :

Data2.RecordSource "Select audit.date_audit,sujet_audit from audit where format(audit.date_audit,'dd-mm-yyyy') format(cdate('" & DTPicker1.Value & "'),'dd-mm-yyyy')"


Merci encore
Messages postés
66
Date d'inscription
mercredi 31 mars 2004
Statut
Membre
Dernière intervention
3 juin 2004

En fait non, cela marche pour le = , mais pas pour les > ou <.

Pour lui le 25/05/04 est superieur au 02/06/04.

Je vais chercher une autre solution.

Merci qd mm.
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
normal !! tu compre des chaines de caractère avec des >

y'a pas un problème, là ??

tu constateras que 20040525 < 20040604
Messages postés
615
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
4 juillet 2012

J'ai vérifié dans une de mes appli. j'utilise aussi le DTPicker pour faire une comparaison de date avec une date dans une base Access mais je n'ai pas ce problème tout fonctionne bien. En gros je format le resultat du DTPicker en format date courte avant de l'utiliser comme ceci:

Dim DateValue1 as string
DateValue1 = Format(DTP_Date1.Value, ShortDate)
DateValue1 = DateSlash(DateValue1)
(pour DateSlash voir annotation en fin de texte )

ShortDate est une variable string du format de date courte par exemple "d/MM/YYYY" dans mon appli. je vais chercher cette information dans la base de registre du système car celle-ci change selon les paramètres pays.

voici ensuite la requete SQL que j'utilise

Sql_Cond = Sql_Cond & "(((FFacture." & ReDate & ")" & DSign & "#" & DateValue1 & "# ));"

Dsign est une variable string d'opérande de date comme ">","=" etc..

A noter aussi une petite fonction pour parer un bug Microsoft dont voici le code

'******************************************************************************************
'* Cette fonction converti le format date jj.mm.yyyy par jj/mm/yyyy *
'* Pour parer à un bug de format de date Microsoft MERCI BILL !! *
'******************************************************************************************
Public Function DateSlash(ItemDate As String) As String
Dim i As Integer
Dim Spot As String

For i = 1 To Len(ItemDate)
If Mid(ItemDate, i, 1) = "." Then
Spot = Spot & "/"
Else
Spot = Spot & Mid(ItemDate, i, 1)
End If
Next i
DateSlash = Spot

End Function

Pascal Laurençon
Mieux vaut un petit clic que deux grandes claques..
Mieux vaut un naze bin qu'un naze tout court..
Messages postés
66
Date d'inscription
mercredi 31 mars 2004
Statut
Membre
Dernière intervention
3 juin 2004

Renfield : nomralement le Cdate ne convertit pas une chaine de caractère en date ? j'ai mis cette fonction un peu aux hasard, je ne sais pas si ca marche ds une requette, mais vu qu'il n'a pas gueuler à l'execution, je pensais que c'était bon.

Merci pluplu, je vais essayer tout de suite.