[vbs] ADODB sushi sur query Date

Résolu
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 - 13 févr. 2008 à 20:33
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 - 13 févr. 2008 à 21:16
 Bonsoir à tous,
 
Je m'initie à l'utilisation d'adodb, et donc aux queries, pour parcourir un fichier .xls .

Mon xls (Excel 2003 sur XP SP2):
<col style= \"width: 60pt;\" span=\"3\" width=\"80\" />----
Date, Test1, Test2, ----
02/08/2008, 400, 100, ----
08/02/2008, 100, 200

Question surement naive, pourquoi la query ci-dessous me renvoie l'elément 02/08/2008
au lieu de 08/02/2008 (variable sDateDeb) ??? 
Essais vains avec CDate, FormatDateTime, SetLocale (fr-fr, en-gb, en-us) ....
J'ai bien parcouru certains posts (dixit Renfield, x% de questions sur les requêtes concernent les dates !),
mais je n'ai pas trouvé de réponse concernant le vbs. Idem avec l'illustrissime http://www.laltruiste.com/coursado/sommaire.html' target='_blank'>l'altruiste .

Je teste pour l'instant sur une date, le but étant ensuite, d'utiliser un Between, dont je ne suis pas certain
qu'il puisse être utilisé en vbs. Peut-être obligation de [Date] > = sDeb And [Date]  =<  sFin.
Stop JMO [Cliquer ici pour prendre connaissance du règlement. ...] une question par post .....

Option Explicit

Dim sFile
Dim sDateDeb, sDateFin

sFile = "D:\JMO\SCRIPTS\Fichiers\Classeur3.xls"

sDateDeb = "08/02/2008"
sDateFin = "13/02/2008"

Msgbox FnExtractDate(sFile, sDateDeb, sDateFin)

Function FnExtractDate(argFile, argDateDeb, argDateFin)
   Dim oConn, oRs, MyQuery
   Dim sResult
   sResult = "Elément(s) extrait(s)"
        MyQuery "SELECT * FROM [Feuil1$] WHERE [Date] #" & argDateDeb & "#"

   Set oConn = CreateObject("ADODB.Connection")
   oConn.Open ("provider=Microsoft.Jet.OLEDB.4.0; " & "data source=" _
         & argFile & "; " & "Extended Properties=""Excel 8.0;HDR=YES;""")
  
   Set oRs = CreateObject("ADODB.Recordset")
   oRs.Open MyQuery, oConn, 1, 3 '1=adOpenKeyset, 3=adLockOptimistic

   Do Until oRs.EOF
      sResult = sResult &vbCr& oRs.Fields(0) &vbCr&_
                        oRs.Fields(1)  &vbCr& oRs.Fields(2)
      oRs.MoveNext
   Loop

   Set oRs = Nothing
   Set oConn = Nothing
  
   FnExtractDate = sResult
  
End Function

Merci d'avance.

jean-marc

3 réponses

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
13 févr. 2008 à 20:45
Salut
Ah les dates et les bases de données : il y aura toujours des problèmes !

Les dates stockées dans les bases de données sont toujours stockées au format américain.
C'est le format que tu appliques à ta cellule qui affiche la date à la french.
Malgré tout, dans ce genre de requète, quand une date ambigüe apparait, il lui devient impossible de savoir quel format appliquer.
La solution consiste donc à demander au moteur SQL de transformer les dates (pas à Excel ou VB)
Essaye donc ça :   MyQuery "SELECT * FROM [Feuil1$] WHERE [Date] DateValue(#" & argDateDeb & "#)"
Tu remarqueras que DateValue est à l'intérieur des ", donc interprété par SQL, pas par le VBS
Comme je ne suis pas sûr de moi, essaye aussi en remplaçant les # par des ' :   MyQuery "SELECT * FROM [Feuil1$] WHERE [Date] DateValue('" & argDateDeb & "')"

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

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
13 févr. 2008 à 21:02
Re,

Bonsoir Jack,
  MyQuery "SELECT * FROM [Feuil1$] WHERE [Date] DateValue(#" & argDateDeb & "#)"
  
renvoie 02/08/2008 ... pas bon

Par contre,    MyQuery "SELECT * FROM [Feuil1$] WHERE [Date] DateValue('" & argDateDeb & "')"

renvoie 08/02/2008 ... donc bonne syntaxe.

J'en déduit qu'il faut testé [Feuil1$] ou [Sheet1$] pour constituer la query.

Joker:
Est-ce + ou - d'utiliser adodb au lieu de Excel.Application ???

Merci.
@+.
jean-marc
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
13 févr. 2008 à 21:16
Non, mauvaise déduction, si  [Sheet1$]  le moteur SQL sera interprété la variable, de par le DateValue.
Et re-merci, Jack, pour toutes ces précisions.

jean-marc
0
Rejoignez-nous