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

Interfaces de programmation Oracle Discussion :

[OCILIB] Problème requête SQL


Sujet :

Interfaces de programmation Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut [OCILIB] Problème requête SQL
    J'ai Visual studio C++ 2008 et Oracle 11g, je lance le serveur sql oracle
    je lance le code suivant à partir de visual :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    #include "stdafx.h"
    #include "ocilib.h"
    #pragma comment(lib, "ociliba.lib")
     
    int main(void)
    {
      OCI_Connection *cn;
     
     
     
      if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT))
        return EXIT_FAILURE;
     
      cn = OCI_ConnectionCreate("XE", "system", "pass", OCI_SESSION_DEFAULT);
     
      if (cn != NULL)
      {
        printf(OCI_GetVersionServer(cn));
     
        printf("Server major    version : %i\n", OCI_GetServerMajorVersion(cn));
        printf("Server minor    version : %i\n", OCI_GetServerMinorVersion(cn));
        printf("Server revision version : %i\n", OCI_GetServerRevisionVersion(cn));
     
        printf("Connection      version : %i\n", OCI_GetVersionConnection(cn));
     
      }
     
      OCI_Cleanup();
     
      return system("PAUSE");
    }
    Il passe nickel et m'affiche les versions, j'en conclue donc qu'il se connecte à la base de donnée
    Dans ma base de donnée j'ai crée 2 tables: Station et Distance et lorsque que j'appelle une requête sql (insert, delete ou select) le programme se lance mais rien ne se passe dans la base de donnée


    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    #include "stdafx.h"
    #include "ocilib.h"
    #pragma comment(lib, "ociliba.lib")
     
    int main(void)
    {
      OCI_Connection *cn;
      OCI_Statement  *st;
      OCI_Resultset  *rs;
     
     
     
      if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT))
        return EXIT_FAILURE;
     
      cn = OCI_ConnectionCreate("XE", "system", "azerty", OCI_SESSION_DEFAULT);
     
      if (cn != NULL)
      {
        printf(OCI_GetVersionServer(cn));
     
        printf("Server major    version : %i\n", OCI_GetServerMajorVersion(cn));
        printf("Server minor    version : %i\n", OCI_GetServerMinorVersion(cn));
        printf("Server revision version : %i\n", OCI_GetServerRevisionVersion(cn));
     
        printf("Connection      version : %i\n", OCI_GetVersionConnection(cn));
    /*
    	st  = OCI_StatementCreate(cn);
     
           OCI_ExecuteStmt(st, "SELECT * FROM DISTANCE");
     
           rs = OCI_GetResultset(st);
          while (OCI_FetchNext(rs))
    		printf("id1: %i, id2: %i,dist: %i \n ", OCI_GetInt2(rs, "IDSTATION1")  , OCI_GetInt2(rs, "IDSTATION2"), OCI_GetInt2(rs, "distance"));
     
        printf("\n%d row(s) fetched\n", OCI_GetRowCount(rs));
    */
     
     st = OCI_StatementCreate(cn);
     
        OCI_ExecuteStmt(st, "delete from station where idStation=1;");
     
        printf("%d row deleted", OCI_GetAffectedRows(st));
     
        OCI_Commit(cn);
     
        OCI_StatementFree(st);
     
     
      }
     
      OCI_Cleanup();
     
      return system("PAUSE");
    }

  2. #2
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 306
    Points
    5 306
    Par défaut
    C'est normal car le statement échoue car le ";" est de trop.
    Il ne faut pas le mettre (il est utilisé dans les éditeurs SQL tel que sql*plus pour délimiter les différents ordres sql)

    De plus, toujours gérer les erreurs ! Si tu avais fourni un error handler à OCI_Initialize(), tu aurai de suite vu l'erreur de syntaxe !

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    J'ai le même problème en ôtant le ; à la fin de la requête SQL

  4. #4
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 306
    Points
    5 306
    Par défaut
    As tu fourni un error handler ?
    Ou est l'ouput du programme ?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    #include "stdafx.h"
     
    #include "ocilib.h"
    #pragma comment(lib, "ociliba.lib")
    typedef void (*POCI_ERROR) (OCI_Error *err);
     
     
    int main(void)
    {
      OCI_Connection *cn;
      OCI_Statement  *st;
      OCI_Resultset  *rs;
     
     
     
      if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT))
        return EXIT_FAILURE;
     
      cn = OCI_ConnectionCreate("XE", "system", "azerty", OCI_SESSION_DEFAULT);
     
      if (cn != NULL)
      {
        printf(OCI_GetVersionServer(cn));
     
        printf("Server major    version : %i\n", OCI_GetServerMajorVersion(cn));
        printf("Server minor    version : %i\n", OCI_GetServerMinorVersion(cn));
        printf("Server revision version : %i\n", OCI_GetServerRevisionVersion(cn));
     
        printf("Connection      version : %i\n", OCI_GetVersionConnection(cn));
    /*
    	st  = OCI_StatementCreate(cn);
     
        OCI_ExecuteStmt(st, "SELECT * FROM DISTANCE");
     
        rs = OCI_GetResultset(st);
        while (OCI_FetchNext(rs))
    		printf("id1: %i, id2: %i,dist: %i \n ", OCI_GetInt2(rs, "IDSTATION1")  , OCI_GetInt2(rs, "IDSTATION2"), OCI_GetInt2(rs, "distance"));
     
        printf("\n%d row(s) fetched\n", OCI_GetRowCount(rs));*/
     
     st = OCI_StatementCreate(cn);
     
        OCI_ExecuteStmt(st, "delete from station where idStation=1");
          if (cn == NULL)
      {
         OCI_Error *err = OCI_GetLastError();
         printf("errcode %d, errmsg %s", OCI_ErrorGetOCICode(err),  OCI_ErrorGetString(err));
      }
          if (st == NULL)
      {
         OCI_Error *err = OCI_GetLastError();
         printf("errcode %d, errmsg %s", OCI_ErrorGetOCICode(err),  OCI_ErrorGetString(err));
      }
        printf("%d row deleted\n", OCI_GetAffectedRows(st));
     
        OCI_Commit(cn);
     
        OCI_StatementFree(st);
     
     
      }
     
      OCI_Cleanup();
     
      return system("PAUSE");
    }
    Voila pour la gestion des erreur et en output j'ai dans la console :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Oracle Database 10g Express Edition Realease 10.2.0.1.0 - ProductionServer major version :10
    Server minor version : 2
    Server revision version : 10
    Connection version : 1020
    0 row deleted
    Appuyez sur une touche pour continuer ...
    Et voici aussi ma table SQL de la base de donnée (pour le fait qu'il n'y ait pas de maj dans la requête j'ai essayé avec et sans ça ne change rien) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    EDIT	IDSTATION	NOMSTATION	NOMSECTEUR	ETAT	TYPE	ALTITUDE	IDBORNE
    Edit	1	darcy	a	a	a	1	1
    Edit	2	pp	pp	pp	pp	2	2
    Edit	5	dz	dzdz	aze	aze	7	8
    		row(s) 1 - 3 of 3

  6. #6
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 306
    Points
    5 306
    Par défaut
    Ton code ne peut pas gérer les erreurs car :

    - soit tu passe un callback à OCI_Initialize()
    - soit tu utilises OCI_GetLastError() mais dans ce cas, il faut passer le flag OCI_ENV_CONTEXT à OCI_Initialize()

    Tel quel, c'est normal qu'aucune erreur ne soit visible dans le log

Discussions similaires

  1. Problème requête SQL
    Par mandaillou dans le forum Langage SQL
    Réponses: 15
    Dernier message: 03/10/2005, 12h37
  2. Problème requête SQL dans page ASP
    Par rocs dans le forum ASP
    Réponses: 14
    Dernier message: 26/07/2005, 16h38
  3. problème requête sql
    Par psychoBob dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/07/2005, 18h50
  4. problème requête sql
    Par perfectdams dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 21/06/2005, 19h09
  5. Réponses: 8
    Dernier message: 23/10/2003, 17h22

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