Probleme de date entre VB6 et Access 2000

cs_pisko Messages postés 22 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 1 juin 2003 - 4 juil. 2002 à 10:10
cs_pisko Messages postés 22 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 1 juin 2003 - 5 juil. 2002 à 00:46
Salut,

J'ai un soucis quant aux échanges de dates entre un prog VB6 et Access.
J'ai une table qui contient des champs date au format "date abgrégée" donc logiquement du style 15/12/2002.
Quand depuis mon prog VB6 je fais une requete (select / insert / update) du style select * from MaTable where date_creation = #03/07/2002# (pour le 03 juillet 2002) access transforme cette date en 07/03/2002 !!

Comment puis-je garder tous les formats de dates en francais.

J'ai deja ete faire un tour dans les options regionales du panneau de conf et tout est bien au bon format.

4 réponses

skrol29 Messages postés 114 Date d'inscription vendredi 3 mai 2002 Statut Membre Dernière intervention 17 novembre 2014
4 juil. 2002 à 11:14
Salut,

Tu peux pas garder tous les formats de date en français parce que VB et Jet (le moteur SGBD de Access) le gèrent en interne en format US.
C'est important que le moteur le gère d'une seul façon, sinon d'un poste à l'autre ton programme foire à cause d'un paramètrage de format date Windows.

Ca veut dire que dans tes requêtes qui passent par le code, il faut utiliser le format américains. Dans le fichier d'aide, il est expliqué que pour lever l'ambiguité sur le format que tu utilises pour rédiger un pgrase SQL, il faut utiliser le format
mm-dd-yyyy. Avec des tirets, comme ça Jet n'aissairas pas de l'interpréter autrement qu'un format US.

Remarque finale : on a l'impression que VB gère les dates en interne au format local paramétré sous Windows, mais c'est une erreur.
Quand tu fait
Debug.Print MaDate
ou
MonCtrTexte = MaDate
il te sort bien un format FR mais il a opéré un transtypage de Date en Texte. Mais en SQL, ce transtypage ne se fait pas.

Voili, voilu
--------------------
Skrol 29
www.skrol29.com
--------------------
0
cs_pisko Messages postés 22 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 1 juin 2003
4 juil. 2002 à 13:53
Merci de ta réponse,

Mais cela signifie que je dois changer les dates en mm/dd/yyyy dans la base access aussi ???
Le probleme c'est que je ne travaille que sur une partie du projet et que dans le reste toutes les dates sont gérées au format francais...

N'y aurait-il pas une solution miracle :o)

Ludo
0
skrol29 Messages postés 114 Date d'inscription vendredi 3 mai 2002 Statut Membre Dernière intervention 17 novembre 2014
4 juil. 2002 à 14:52
Dans tout de qui est code VB ou code SQL, tu dois utiliser le format US.
Mais dans tes interfaces utilisateurs, tu peux tout à fait utiliser le format Français. Il vaut mieux d'ailleur.

Voici un exemple :

Si tu code de la façon suivante :
MaTextBox = MaDate
Alors VB fait un transtypage implicite de MaDate en texte en utilisant le format Windows défini sur le poste local. Ca peut réserver des mauvaises surprises.

Si tu veux être sûr du format affiché, il vaut mieux coder un transtypage explicite, comme :
MaTextBox = Format$(MaDate,"dd/mm/yyy")

Si tu veux lire une date saisie dans une TextBox attention encore une fois au transtypage implicite :
MaDate = MaTextBox
équivaut à
MaDate = CvDate(MaTextBox)
Ici encore, VB utilise un transtypage implicite qui dépend du paramètre Windows ET de la version de VB (FR ou US) !!!

Je conseille plutôt la fonction :
MaDate = DateSerial(val(mid$(MaTextBox,6,4)),val(mid$(MaTextBox,4,2)),val(left$(MaTextBox,2)))

C'est lourd mais ça ne fait pas d'erreur de date.
Et puis ça tout ça peut être codé dans une fonction globale qui te convertie de Txt en Date et vice-versa.

--------------------
Skrol 29
www.skrol29.com
--------------------
0
cs_pisko Messages postés 22 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 1 juin 2003
5 juil. 2002 à 00:46
Salut,

C'est nickel.
J'ai fait une petite fonction dans un module et depuis ca fonctionne mieux :o)

Merci.

Ludo
0
Rejoignez-nous