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

MS SQL Server Discussion :

SQL server et toujours des problèmes de dates ...


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 26
    Points : 16
    Points
    16
    Par défaut SQL server et toujours des problèmes de dates ...
    Bonjour,

    J'ai un module écrit en vb.net dans lequel j'utilise des dates. Pour respecter le modèle 3-Tiers sachant que je voudrais que mon application fonctionne n'importe où dans le monde, j'utilise le format ISO pour les dates et l'heure, soit une string du type: yyyy-MM-dd HH:mm:ss

    J'ai également une base de données SQL Server dont la langue par défaut est french (sécurité -> connexions -> nom d'un accès -> propriétés -> langue )
    Dans matable j'ai déclaré une colonne de type datetime.

    Lorsque j'insère un record par une requête sql insert into matable values ( ..., madateenformatiso, ...) j'obtiens une erreur sql "conversion char en type datetime donne valeur hors limite" car dans la table il est écrit dd.mm.yyyy hh:mm:ss. La string dans VB est par contre correcte.

    Pourquoi le tiret s'est transformé en point ?
    Pourquoi le jour est avant le mois ? (à cause de french ?)
    Comment remédier à cela pour que cela fonctionne avec n'importe quelle version de SQL Server avec n'importe quelle langue ?

  2. #2
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Si le probleme est le mm pour tout le monde, il doit s'agir effectivement d'un pb de conversion de date.
    Schematiquement cela pourrait donner ceci:
    Client (data au format local) ==> requete SQL (format US) ==> insertion dans la base qui essaye de faire entrer une date au format US dans le format definit dans ses parametres (en l'occurence FR).

    La solution que j'ai definitivement adopté est de mettre la date ds mes BD au format "double" ou "float" pour SQL Server.
    Qd un client, saisi une date pour l'insérer dans la BD, je récupère dans des champs différents le jour, le mois et l'année. Je concatène et fait une conversion en utilisant la fonction cdbl(madate). Et ça marche à tous les coups.

    Pour ce qui est de la restitution chez le client, cela se fait selon ses paramètres régionaux.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 163
    Points : 45
    Points
    45
    Par défaut
    Et ça marche quelque soit le pays du "client" et quelque soit le pays du "serveur" et quelque soit la version de vb et quelque soit la version (au niveau langue) de sql server ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Pour préciser l'environnement, j'ai un poste client à Paris, un autre à New-York, un troisième à Tokio et le serveur à Genève. La même application en VB.NET doit tourner dans ces postes client. Le serveur à un SGBD "SQL Server 2000" version française. Toutes les machines sont donc dans des fuseaux horaires différents et ont des paramètres régionaux différents. Je souhaite stocker pour chaque information envoyée au serveur l'heure locale du client.
    D'où ma question ... pour harmoniser tout cela ! iso8601 ne semble pas bien fonctionner avec SQL Server mais serait-ce la solution ?

  5. #5
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Vous devez utiliser l'instruction :

    Avant toute requête insert,delete ou affectation d'une date à une variable.
    Pour l'affichage, vous devez faire usage des converts.
    Foncez sur la faq

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Bonjour,
    J'ai suivi les recommandations de Wolo:

    depuis mon code VB j'envoi "set dateformat ymd". Pas de retour d'erreur ...
    ensuite je fais une insertion du style:
    INSERT INTO ... VALUES( ... , '2005-10-24 17:02:06' , ... )

    J'ai un retour d'erreur* mais l'insertion a fonctionné MAIS l'information apparaît comme ceci dans la table: 24.10.2005 17:02:06

    Donc cela ne résoud pas mon problème ?


    * une erreur grave s'est produite sur la commande ... parametre non valide

  7. #7
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Citation Envoyé par constantin
    Bonjour,
    J'ai suivi les recommandations de Wolo:
    depuis mon code VB j'envoi "set dateformat ymd". Pas de retour d'erreur ...
    Il n'est pas recommandé de trainballé du code sql dans un code client.
    Tu devait créer une procedure stockée et faire appel à celle-ci.
    Citation Envoyé par constantin
    J'ai un retour d'erreur* mais l'insertion a fonctionné MAIS l'information apparaît comme ceci dans la table: 24.10.2005 17:02:06
    Quelle méssage d'érreur ?
    Citation Envoyé par constantin
    Donc cela ne résoud pas mon problème ?
    C'est juste un problème d'affichage !
    Pourquoi tu t'alarmes pour un problème de formatage de date ?
    Tu n'as qu'à gérer cela par une commande format.
    Ou configurer la DSN de sorte qu'elle prenne le format de date configurée dans le panneau de configuration !

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  8. #8
    Membre actif
    Avatar de Eric.H
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 220
    Points : 286
    Points
    286
    Par défaut
    Nous on as le problème avec Delphi et MSSQL solutions trouvées :

    Dans le client SQL : on décoche les deux options "Conversion ANSI vers OEM' et "Utiliser les paramétres internationaux"
    De plus on met sur tous les poste la NTWDBLib Americaine !!!

    Donc on s'est fait notre propre installe de Client SQL light et depuis plus de problème

    On a le problème depuis Delphi 3 et MSSQL 7 (au minimum)
    Le problème existeait encore avec MSSQL 2K, mais on a jamais réessayé avec D7 ou D2005 et MSSQL 2005

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Pour Wolo

    Le message d'erreur dans VB.NET est: "une erreur grave s'est produite sur la commande ... parametre non valide"
    J'utilise la commande Format (dans VB.NET)
    Quand j'écris "l'information apparaît ..." je faisais allusion à Enterprise Manager qui affiche un point au lieu d'un tiret demandé (par Format dans VB)
    pour les dates de ma table. Et je ne comprend pas pourquoi.
    De toutes façon je ne peux pas tolérer ce message d'erreur ...

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    j'ai honte

    Le message d'erreur provient d'un trigger que j'ai modifié avant les vacances sans le tester. Moralité: il ne faut pas prendre de vacances.

    Mais la date apparaît toujours avec un point au lieu d'un tiret et ça je ne sais pas pourquoi.

  11. #11
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Ca, c'est juste un problème de formattage de données !
    Vous pouvez utiliser un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Convert(Varchar(10),MonChamp,111)
    Par exemple,
    Ou passer par une fonction java qui te remplace les points par les moins.
    Facile n'est ce pas ?

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 11/07/2006, 16h09
  2. [SQL Server 2005] Restoration des logs
    Par psafp dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 06/07/2006, 08h54
  3. [SQL Server 2005] Valeur des données vides
    Par davasm dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/06/2006, 09h38
  4. [SQL Server 8] Trouver une plage de date
    Par Baquardie dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/04/2006, 19h30
  5. [SQL server] Comment Fusionner des données dans une requête
    Par MoTUmBo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2005, 15h24

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