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

Messages postés
21
Date d'inscription
mardi 20 avril 2004
Dernière intervention
7 mai 2014
- - Dernière réponse : koriteki
Messages postés
21
Date d'inscription
mardi 20 avril 2004
Dernière intervention
7 mai 2014
- 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

Meilleure réponse
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
3
Merci
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)

Dire « Merci » 3

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

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de cs_Jack
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
3
Merci
"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++

Dire « Merci » 3

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

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
3
Merci
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++

Dire « Merci » 3

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

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de BruNews
Messages postés
21
Date d'inscription
mardi 20 avril 2004
Dernière intervention
7 mai 2014
0
Merci
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.