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

C++ Discussion :

ODBC - ORACLE - SOCI (lib) - ERROR date


Sujet :

C++

  1. #1
    Membre actif
    Inscrit en
    Février 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 53
    Par défaut ODBC - ORACLE - SOCI (lib) - ERROR date
    Bonjour,

    Context:
    -Projet C++
    -Base Oracle 9i
    -lib d acces a la DB : Soci (v 3.0)
    -ODBC (Oracle 9i)
    -contrainte: Utiliser ODBC pour se connecter a Oracle

    Erreur:
    Probleme lors d insertion de date de maniere massive.
    Error ODBC 22003 :"Numeric value out of range"

    Un peu plus de details:
    Avec l API soci, il est possible de faire des insertions de 2 manieres differentes:
    • -soit 1 par 1
    • - soit plusieurs a la fois (vector)

    Mon pb vient de l insertion massive.
    Si je prend un boost::gregorian::date pour UNE insertion ca marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    double Id = 50;
    std::string Name = "InsertFromCode";
    boost::gregorian::date dateEval = boost::gregorian::date       (boost::gregorian::date::year_type(2010),boost::gregorian::date::month_type(5),boost::gregorian::date::day_type(3));
    std::string stuff = "BARSA";
     
    sql << "insert into TEST_ODBC(ID,NAME,DATE_EVAL,STUFF) values(:id,:name,:dateEval,:stuff)", use(Id),use(Name),use(dateEval),use(stuff);
     
    --> Ceci marche tres bien : OK
    Mais si je fais la meme chose avec une insertion massive ca marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    //INIT
    std::vector<double> vectId;
    std::vector<boost::gregorian::date > vectDate;
    boost::gregorian::date dateEval = boost::gregorian::date(boost::gregorian::date::year_type(2010),boost::gregorian::date::month_type(5),boost::gregorian::date::day_type(3));
    double Id=100;
     
    int NBLINE = 10;
    for(int i(0);i<NBLINE;++i)
    {
       Id++;
       vectId.push_back(Id);
       vectDate.push_back(dateEval );
    }
    sql << "insert into TEST_ODBC(ID,DATE_EVAL) values(:Id,:DateEval)", use(vectId),use(vectDate);
     
    --> ca marche pas : NOK
    Message d ERREUR:
    Error ODBC : 22003
    Msg: Numeric value out of range


    Je ne comprends pas pkoi si je fais un seul insert ca marche avec le format date (boost::gregorian::date) et pas avec un insert massif (BulkOperation)

    On pourra noter que le code suivant marche pour faire un insert massif mais c est tres LAID:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    //INIT
    std::vector<double> vectId;
    std::vector<std::string> vectDate;
    std::string dateStringOK = "05/January/05";(ou "05-January-05";)	
    double Id=100;
     
    int NBLINE = 10;
    for(int i(0);i<NBLINE;++i)
    {
      Id++;
      vectId.push_back(Id);
      vectDate.push_back(dateStringOK );
    }
    sql << "insert into TEST_ODBC(ID,DATE_EVAL) values(:Id,:DateEval)", use(vectId),use(vectDate);
     
    --> Ca marche mais c est tres moche:
         - se servir d une string pour faire un insert sur une date
         - le format de la string est : "05/January/05";(ou "05-January-05";)
           ce qui pose pb sur les langues.
    Si quelqu un a une idee

  2. #2
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 87
    Par défaut
    Bonsoir

    Je n'ai pas la prétention de t'apporter une solution. Cependant, en cherchant un peu sur , j'ai cru comprendre que ton soucis proviens de ODBC.

    http://social.msdn.microsoft.com/For...0-13d9e6b8c3d4


    C'est un probleme de convertion de la date.

  3. #3
    Membre actif
    Inscrit en
    Février 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 53
    Par défaut vers une solution
    Comme je l explique sur mon autre post, on a :
    - client 10g, Oracle 9i , vector<string> avec le format "24/05/2010" --> NOK
    Je viens de faire un test sur une base Oracle 10g et tout marche:
    -client 10g, Oracle 10g , vector<string> avec le format "24/05/2010" --> OK


    Ce comportement reste un peu curieux.
    Si quelqu un voit une explication ....

Discussions similaires

  1. [SQL] Upload Champ Date via ODBC (Oracle)
    Par benjisan dans le forum SAS Base
    Réponses: 2
    Dernier message: 28/06/2013, 15h37
  2. ODBC - API SOCI (ORACLE)
    Par pavel dans le forum C++
    Réponses: 1
    Dernier message: 01/05/2010, 20h44
  3. Différence entre drivers ODBC Oracle
    Par snoopy69 dans le forum Oracle
    Réponses: 4
    Dernier message: 24/02/2005, 14h27
  4. Problème avec les paramètres date BDE/ODBC Oracle/XP Pro
    Par Bloon dans le forum Bases de données
    Réponses: 3
    Dernier message: 06/10/2004, 10h09
  5. [VB6] Connection ODBC Oracle
    Par babe dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 07/10/2002, 16h52

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