Comparé une heure Access avec une heure VB6 [Résolu]

koriteki 21 Messages postés mardi 20 avril 2004Date d'inscription 7 mai 2014 Dernière intervention - 27 févr. 2008 à 15:37 - Dernière réponse : koriteki 21 Messages postés mardi 20 avril 2004Date d'inscription 7 mai 2014 Dernière intervention
- 28 févr. 2008 à 13:49
Bonjour,
Je cherche à comparer dans le cadre d'un requete une heure access avec une heure VB6, pour trier des enregistrement. Voila le code utilisé:

Dim HeureDbt, HeureFin As Date

Set rec = New ADODB.Recordset
rec.Open "SELECT struct_num, jour_num, h_deb, h_fin, nb " _
       & "From JOUR_STRUCTURE_DETAIL " _       & "Where (((struct_num) '" & M & "') And ((jour_num) '" & L & "') " _
       & "And ((h_deb) >= '" & HeureDbt & "' ) And ((h_fin) <= '" & HeureFin & "' ))", conn, adOpenDynamic, adLockOptimistic
If rec.EOF = False Then
        tableau.Cells(K + 9, 9) = tableau.Cells(K + 9, 9) + rec.Fields("nb")
Else
        Set rec = New ADODB.Recordset
        rec.Open "SELECT struct_num, jour_num, nb FROM JOUR_STRUCTURE " _
           & "WHERE struct_num= '" & M & "' AND jour_num= '" & L & "' ;", conn, adOpenDynamic, adLockOptimistic
        If rec.EOF = False Then
                tableau.Cells(K + 9, 9) = tableau.Cells(K + 9, 9) + rec.Fields("nb")
        End If
End If

Merci par avance.
Afficher la suite 

Votre réponse

4 réponses

cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 27 févr. 2008 à 16:50
+3
Utile
Salut
Rappel des règles syntaxiques de base VB6 et SQL :
(ces règles sont écrites 10 fois par semaine dans le forum : tu aurais pu chercher un peu)

- VB6 :
   Dim HeureDbt, HeureFin As Date
ne signifie pas que HeureDbt sera dimensionné en Date.
Il sera dimensionné en Variant. Cela pose quelque fois des soucis, justement dans le domaine des conversions
Il faut donc répéter le type pour chaque variable.

- VB6 :
Comme son nom l'indique, le format Date contient une date agrémentée de l'heure.
Si tu n'as pas besoin de la date dans ton format, mais uniquement des heures, mieux vaut les dimensionner en String et d'utiliser le format standard  HH:NN:SS
Rappel : Les minutes ne s'abrègent pas avec M mais avec N (M = Mois)

- SQL :
Encadrement des contenus des champs :
Type numérique : Pas d'encadrement
Type chaine : Encadrement par '
Type Date : Encadrement par #
Le type dont je parle ici est celui du type du champ tel que défini dans la base de données, pas sous VB
Exemple :
   "... Where ChampDate = #" & maDate & "#"

- SQL :
Sous Access, bien quon définisse un format date à la française (jj/mm/aaaa), les données sont stockées à l'américaine (mm/jj/aaa). Le format n'opère que sur l'affichage des données sous Access
Donc, en VB6, tu récupèreras des dates à l'américaine.
Pour corriger le tir, il suffit de demander à Access de transformer le format :
Exemple :
   "... Where ChampDate = DateValue('" & maDate & "')"
et dans ce cas, on revient à un encadrement de type String avec des '
Tu noteras que DateValue est à l'intérieur des ", donc dans la syntaxe SQL, pas VB.

- Général :
Dans ta requète SQL, après la clause WHERE, on ne trouve que des AND
Il est donc inutile de surcharger la requète avec cet empilement de parenthèses

Conclusion :
La syntaxe que tu recherches dépend donc de la manière dont tes champs de base de données sont déclarés.

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)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Jack
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 27 févr. 2008 à 19:09
+3
Utile
"Sous Access, bien quon définisse un format date à la française (jj/mm/aaaa), les données sont stockées à l'américaine (mm/jj/aaa)."

NON, je vais répéter pour la Xeme fois qu'un champ DATE d'Access n'est rien d'autre qu'un Double (flottant 64 bits) et n'a donc aucun autre format que: signe - exposant - mantisse.
Son mode de calcul est le standard OLE de Windows: 30/12/1899 = 0,00, à 12h c'est 0,5 etc..

ciao...
BruNews, MVP VC++
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de BruNews
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 27 févr. 2008 à 19:11
+3
Utile
J'ai oublié de préciser que c'est exactement le standard qu'emploie le type Date de VB6 qui n'est rien d'autre lui aussi qu'un Double en interne (encapsulé dans un Variant).

ciao...
BruNews, MVP VC++
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de BruNews
koriteki 21 Messages postés mardi 20 avril 2004Date d'inscription 7 mai 2014 Dernière intervention - 28 févr. 2008 à 13:49
0
Utile
Merci beaucoup ces réponses qui me retirent une épine du pied
Commenter la réponse de koriteki

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.