1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    août 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : août 2005
    Messages : 78
    Points : 38
    Points
    38

    Par défaut Office 2010 64bits - [Oracle][ODBC][Ora]ORA-01847: day of month must be between 1 and last day of month

    Bonjour,

    Je tente de migrer quelques tableaux Excels qui interrogent une base Oracle 10g Release 10.2.0.5.0 - 64bit

    Tout fonctionnait bien avec office 2000.
    Maintenant que j'ai un Office 2010 64 bits les problèmes commencent.

    J'ai pu correctement configurer la liaison odbc, et des requêtes simples fonctionnent.

    Aujourd'hui j'ai une requête basée sur une date.
    Je recherche dans une table oracle les enregistrements postérieurs à une date donnée.
    Je vais chercher dans une cellule la date de référence.

    Lorsque la requête s'actualise, je reçois le message
    [Oracle][ODBC][Ora]ORA-01847: day of month must be between 1 and last day of month
    Dans un autre forum, il était préconisé de transformer une date saisie en texte

    Malheureusement, si cela semble aller pour nos amis anglophones, ce n'est pas le cas avec une version française.
    J'ai maintenant le message
    [Oracle][ODBC][Ora]ORA-01843: Not a valid month
    Comment feriez-vous ?

    merci d'avance.

  2. #2
    Membre émérite
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    décembre 2004
    Messages
    1 948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : décembre 2004
    Messages : 1 948
    Points : 2 931
    Points
    2 931

    Par défaut

    Bonsoir,

    Tu ne nous dit pas comment tu traites la date dans Oracle, mais juste au cas ou, il y a moyen de spécifier le paramètre NLS_DATE_LANGAGE dans un TO_DATE:
    https://docs.oracle.com/cd/B28359_01...114.htm#i79337

    @+
    Aux persévérants aucune route n'est interdite
    Current Status

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    août 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : août 2005
    Messages : 78
    Points : 38
    Points
    38

    Par défaut

    Bonjour,

    merci pour l'info.

    La base oracle est paramétrée avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    NLS_DATE_FORMAT                DD-MON-RR
    NLS_DATE_LANGUAGE              AMERICAN
    et je n'ai pas le droit d'y toucher.


    Dans ms query je remplace dans la zone de critères par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >to_date([dtdb];'jj-mm-aaaa';NLS_DATE_LANGUAGE 'french') Et <to_date([dtfn];'jj-mm-aaaa';NLS_DATE_LANGUAGE 'french')
    et je reçois le message "Erreur de syntaxe"

    j'ai essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >to_date([dtdb];'dd-mm-yyyy') Et <to_date([dtfn];'dd-mm-yyyy')
    et cela semble fonctionner en office 64 bits avec le Driver Oracle Instant Client 64 bits.


    Par contre, ce même fichier excel est ouvert par des versions différentes d'Office 2010 (32 bits ou 64 bits) et je continue de recevoir des erreurs quand je tente de ré-ouvrir ce fichier sur une version 32 bits.
    [Microsoft][Gestionnaire de pilotes ODBC] Echec SQLSetConnectAttr du pilote
    puis
    [Microsoft][ODBC dirver for Oracle]Attribut de chaîne de connexion non valide
    Serait-ce un bug sur le choix du driver odbc à l'ouverture ?
    64 bits: Instant Client d'Oracle + driver ODBC
    32 bits : Microsoft ODBC for Oracle

    note : la connexion ODBC a le même nom que ce soit en 32 ou 64 bits.

  4. #4
    Membre émérite
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    décembre 2004
    Messages
    1 948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : décembre 2004
    Messages : 1 948
    Points : 2 931
    Points
    2 931

    Par défaut

    Bonsoir,
    Bizarre comme facon d'écrire le "to_date". Pourquoi les points-virgules ?
    Essaie avec qqchose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TO_DATE('01-01-2016','DD-MM-YYYY','NLS_DATE_LANGUAGE = French')
    @+
    Aux persévérants aucune route n'est interdite
    Current Status

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    août 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : août 2005
    Messages : 78
    Points : 38
    Points
    38

    Par défaut

    Citation Envoyé par Sunchaser Voir le message
    Bonsoir,
    Bizarre comme facon d'écrire le "to_date". Pourquoi les points-virgules ?
    Parce que le moteur Microsoft Query n'accepte pas les virgules.

  6. #6
    Membre émérite
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    décembre 2004
    Messages
    1 948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : décembre 2004
    Messages : 1 948
    Points : 2 931
    Points
    2 931

    Par défaut

    Citation Envoyé par coyote90 Voir le message
    Parce que le moteur Microsoft Query n'accepte pas les virgules.
    Ah ! Merdouille ... Mille Excuses, j'avais lu en diagonale, je ne connais rien de Microsoft Query, désolé.
    Aux persévérants aucune route n'est interdite
    Current Status

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    août 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : août 2005
    Messages : 78
    Points : 38
    Points
    38

    Par défaut

    Après quelques heures de recherche, je pense avoir trouvé une solution
    OFFICE 2010 est largement plus restrictif que les versions antérieurs pour l'interprétation des dates.

    Le driver ODBC fourni par microsoft dans les versions précédentes de Microsoft Office n'utilise pas la même chaîne de connexion que les drivers ODBC fournis par Oracle.

    Téléchargez les drivers fournis par Oracle (32 bits et 64 bits)
    Rechercher Instant Client Donwload
    Attention a bien prendre la version correspondant à votre système d'exploitation et à votre base de données Oracle.
    Vous aurez besoins de deux fichiers
    • Instant Client Package - Basic
    • Instant Client Package - ODBC


    Installez le driver fourni par oracle, selon la configuration de votre version d'office 32 bits ou 64 bits.

    Dézippez les deux fichiers dans le même dossier. (ex : odbc )
    Placez ce dossier dans un endroit sûr et qui n'est pas effacé régulièrement.
    Si vous souhaitez installer les deux versions, 32 bits et 64 bits, installez les dans deux dossiers différents. (ex : odbc32 et odbc64)

    Lancez l'utilitaire ligne de commande
    Démarrer > Tous les programmes > Accessoires
    Cliquez avec le bouton droit de vote souris sur "Invite de commandes" et choisissez "Exécuter en tant qu'administrateur"
    Déplacez vous dans le dossier ou vous avez dézipper les drivers oracle. ( cd \monchemin\odbc32 )
    Lancez odbc_install
    Si tous se passe bien vous aurez confirmation de la bonne installation du driver.

    Ajoutez dans les variables d'environnement la variable TNS_ADMIN qui pointera vers vos fichier TNSNAMES.ORA et SQLNET.ORA
    (si vous ne savez pas où ils sont, consultez votre administrateur)

    Configurez votre connexion ODBC
    Depuis la ligne de commande ou la zone "Rechercher les programmes et fichiers " du menu de démarrage vous pouvez lancer la configuration odbc
    32-bit ODBC saisir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %WINDIR%\SysWOW64\odbcad32.exe
    64-bit ODBC saisir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %WINDIR%\System32\odbcad32.exe
    Donner un nom DSN (Data Source Name) identique aux différents ordinateurs qui utiliseront les fichiers excel. (ex : mabase )


    Info pour s"en sortir dans excel et microsoft query
    Pour créer une requête avec Microsoft Query
    Dans Office 2010 aller dans
    Données > Données externes > Autres sources > Provenance : Assitant de connexion de données > DSN ODBC
    Choisir la source créée précédemment (le nom du DSN - ex : mabase ).
    pour la suite, c'est l'utilisation standard de microsoft query.
    rappel : si vous voulez utiliser un paramètre placer son nom entre crochets [monparametre]

    Si votre requêtes nécessite le passage d'une date en paramètre.
    Dans la feuille excel
    Attention à la saisie, excel transforme automatiquement la date en un nombre
    (c'est caché, excel affiche un format d'affichage de date pour votre compréhension)
    Afin que le driver odbc puisse utiliser la date, vous ne pourrez pas utiliser directement le champ de saisie.
    Vous devrez transformer cette saisie en texte.
    pour cela j'utilise une autre cellule de la feuille de calcul.

    si la date est en A1 : 01/06/2016
    placez dans une autre cellule (ex B1) la formule : =TEXTE(A1;"jj-mm-yyyy")
    c'est cette cellule B1 qui devra être utilisée pour passer le paramètre à la requête.

    Dans microsoft query
    il est indispensable de bien passer le paramètre sous forme de date au driver ODBC, vous devrez donc utiliser la fonction to_date() d'oracle dans microsoft query
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     to_date([monparametre];'dd-mm-yyyy')
    bonus : pour une recherche entre deux dates vous pouvez saisir ceci dans microsoft query
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >to_date([dtdb];'dd-mm-yyyy') Et <to_date([dtfn]||' 23:59:59';'dd-mm-yyyy HH24:MI:SS')
    Et voilà.
    Fin de ma recherche de solution pour pouvoir interroger Oracle depuis un excel 2010
    Vous noterez que si le nom de DSN est identique, vous pouvez utiliser la requête sans aucun problème quelle que soit la version d'Office (32 bits ou 64 bits).

    Confirmation dans quelques heures après test de différents fichiers excel.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    août 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : août 2005
    Messages : 78
    Points : 38
    Points
    38

    Par défaut

    Citation Envoyé par Sunchaser Voir le message
    Ah ! Merdouille ... Mille Excuses, j'avais lu en diagonale, je ne connais rien de Microsoft Query, désolé.
    Ce n'est pas grave, tes infos m'ont été d'une grande utilité pour explorer quelques pistes.

Discussions similaires

  1. [11gR2] Installation Oracle ODBC Driver Configuration - ERR ORA-12514 :TNS
    Par antalata dans le forum Installation
    Réponses: 0
    Dernier message: 25/06/2014, 12h00
  2. Encore et toujours: odbc_connect() [function.odbc-connect]: SQL error: [Oracle][ODBC][Ora]ORA-12705
    Par dufeu.celine dans le forum Connexions aux bases de données
    Réponses: 7
    Dernier message: 27/07/2011, 23h36
  3. Réponses: 0
    Dernier message: 18/05/2010, 17h16
  4. ORA-01841: year must be between -4713 and +9999
    Par nathbot dans le forum SQL
    Réponses: 3
    Dernier message: 18/12/2007, 13h57
  5. Réponses: 2
    Dernier message: 15/11/2006, 12h22

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