IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Format de date VB6 vs SQL


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Alimentation

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Par défaut Format de date VB6 vs SQL
    Bonjour,

    Nous avons une application VB6 qui roule sur un serveur 2000.

    Dans une des tables, la date a ce format :

    "2002-01-19 00:00:00"

    Dans le logiciel développé en VB6, lorsqu'il lit la date, il reçoit plutôt le format :

    "19/01/2002 00:00:00"

    Le problème?

    La donnée reçue est dans un recordset, et alors qu'aucune modification n'a été apportée au recordset, on l'utilise pour lire une table table. Cependant, en utilisant le format reçu,

    "19/01/2002 00:00:00"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from ac_prod where datesaisie = '19/01/2002 00:00:00'
    Cela renvoit un erreur :

    Msg 296, Level 16, State 3, Line 1
    The conversion of char data type to smalldatetime data type resulted in an out-of-range smalldatetime value.

    (0 row(s) affected)
    Ce que nous ne comprenons pas, c'est pourquoi VB6 reçoit la date dans un autre format que celui envoyé par SQL. Est-ce que c'est relié au regional setting de chaque ordinateur ?

    Merci !

    Note : Je ne savais pas si je devais poster ma question dans le forum VB6 ou SQL, libre à vous de le transférer.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Par défaut
    hello

    A priori je dirais qu'il s'agit d'un problème liés aux paramètres régionaux. Il faudrait vérifier avec le profiler si un n'est pas exécuté à l'ouverture de la session ou dans le code VB (ou dans une proc ?) pour forcer le format de la date, ce qui peut parfois être incompatible avec le format de date du système d'explotation.

    ex. d'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET DATEFORMAT dmy (daymonthyear)
    SET DATEFORMAT ymd (yearmonthday)
    Je ne sais pas comment est passé la date dans VB, si c'est seulement une concaténation d'une chaine de caractère ou si cette date est stockée dans une variable de type date (mes souvenirs de VB sont lointaaaiiiiiiiins !!!!)

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Dans une des tables, la date a ce format :

    "2002-01-19 00:00:00"
    C'est la représentation qui vous est donnée par l'analyseur de requêtes ou SQL Server Management Studio pour les dates stockées au type SMALLDATETIME.

    Ce type stocke les dates sur 4 octets :
    - 2 pour le nombre de jours écoulés depuis le premier janvier 1900
    - 2 pour le nombre de minutes écoulées depuis minuit

    Donc ce qui vous est affiché, quelle que soit l'application cliente, n'est qu'un représentation facilement lisible.

    Si vous écrivez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM ac_prod WHERE datesaisie = CONVERT(datetime, '19/01/2002 00:00:00', 103)
    Cela va fonctionner.
    Alors que si vous écrivez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CAST('19/01/2002 00:00:00' AS datetime)
    C'est à dire ce que fait en interne SQL Server, vous obtenez l'erreur, parce que, comme vous l'a suggéré Kagemaru, le moteur croit que vouis lui demandez le 2e jour du 19e mois.

    Pour savoir quel format est utilisé par votre instance : DBCC USEROPTIONS.

    @++

Discussions similaires

  1. [SQL-SERVER] Configurer le format de date
    Par Angath dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 23/09/2010, 14h15
  2. [SQL 9i ] format de date dans un where
    Par booth dans le forum Oracle
    Réponses: 5
    Dernier message: 14/10/2005, 10h23
  3. requete SQL et probleme de format de Date
    Par huon dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/08/2005, 11h56
  4. format date sous postgres sql
    Par ruppert62 dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 27/05/2005, 12h04
  5. [SQL][DateTime] Formater les dates en SQL
    Par Husqvarna dans le forum C++Builder
    Réponses: 3
    Dernier message: 09/11/2004, 21h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo