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] Utiliser OCILIB sous Borland C++ 5.02 anglais


Sujet :

Interfaces de programmation Oracle

  1. #1
    Membre confirmé Avatar de jack554
    Inscrit en
    Février 2003
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 194
    Par défaut [OCILIB] Utiliser OCILIB sous Borland C++ 5.02 anglais
    Bonjour

    Je ne connais vraiment pas C++ et je ne dispose que du produit Borland C++ version 5.02 anglais pour essayer d'accéder à ma base Oracle 10g

    D'autre part, le tutoriel de Vincent Rogier sur OCILIB s'adresse apparemment déjà à des connaisseurs et j'ai plein de questions.

    1.
    "Copier ocilib\src\ocilib.h dans un répertoire inclus dans la liste de l'option "fichiers headers" du compilateur"
    - Où est cette liste ? Dans Option / Project / Compiler je ne vois que "Precompiled headers" et pas de liste ...

    2.
    "Copier ocilib\lib32|64|ocilib[x].lib dans un répertoire inclus dans la liste de l'option "fichiers bibliothèques" de l'éditeur de lien.
    - Quels fichiers faut-il copier exactement ? Ceux de lib32 ? De lib64 ? ocliba ? ocilibm ? oclilibw ?
    - Où faut-il les copier ? Dans Option / Project / Linker je ne vois aucune "liste de l'option fichiers bibliothèques" ...

    3.
    "Copier ocilib\lib32|64|ocilib[x].dll dans un répertoire inclus dans la variable d'environnement PATH"
    J'ai trouvé %SystemRoot%\system32 dans PATH et copié les 3 fichiers ocilib[x].dll dans C:\Windows\System32

    4.
    La page 6 du tutoriel est complètement incompréhensible pour moi. Que faut-il faire exactement, et où, pour accéder une base Oracle 10G à partir d'un poste client Windows Vista ?

    Merci beaucoup par avance pour votre aide éventuelle et vos précieux conseils

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Salut,

    Je n'ai plus en tête les paramètres projet de Borland C++, mais voici quelques éléments de réponses

    Citation Envoyé par jack554 Voir le message
    - Où est cette liste ? Dans Option / Project / Compiler je ne vois que "Precompiled headers" et pas de liste ...
    Il faut que le compilateur puisse trouver le header "ocilib.h".

    Quelque part dans les options de C++ Builder, tu dois pouvoir indiquer une série de répertoires d'include système ou le compilo C++ builder va chercher les headers commun (comme stdio.h, etc...).
    Il faut à ce niveau la ajouter le répertoire ou de trouve ocilib.h



    Citation Envoyé par jack554 Voir le message
    - Quels fichiers faut-il copier exactement ? Ceux de lib32 ? De lib64 ? ocliba ? ocilibm ? oclilibw ?
    De même que pour les headers, tu dois pouvoir indiquer une série de répertoires ou se trouve les librairies d'import (*.lib) classique (comme par exemple sous windows : user32.lib, ....)
    Il faut à ce niveau la ajouter le répertoire lib32 du répertoire ocilib


    Citation Envoyé par jack554 Voir le message
    - Où faut-il les copier ? Dans Option / Project / Linker je ne vois aucune "liste de l'option fichiers bibliothèques" ...
    Tu dois aussi avoir quelque part la possiblité de dire quelle librairies tu veux linker comme user32.lib, etc...
    Et la il faut ajouter ociliba.lib si tu bosses en ansi, ocilibw.lib si tu est en unicode.

    Citation Envoyé par jack554 Voir le message
    J'ai trouvé %SystemRoot%\system32 dans PATH et copié les 3 fichiers ocilib[x].dll dans C:\Windows\System32
    Pour les dll, soit tu les mets dans le répertoire de ton appli soit effectivement dans system32. Tu n'as besoin que de la dll correspondantre au *.lib que tu utilises


    Citation Envoyé par jack554 Voir le message
    La page 6 du tutoriel est complètement incompréhensible pour moi. Que faut-il faire exactement, et où, pour accéder une base Oracle 10G à partir d'un poste client Windows Vista ?
    Il te faut soit un client oracle complet ou un Instant client
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  3. #3
    Membre confirmé Avatar de jack554
    Inscrit en
    Février 2003
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 194
    Par défaut
    Merci Vicenzo

    Bon, j'ai copié les fichiers .h, .lib et .dll où je pense que c'est bon (C:\BC5\INCLUDE, C:\BC5\LIB, C:\WINDOWS\SYSTEM32). Les deux premiers dossiers sont ceux par défaut de Borland C++, indiqués dans Options / Projet / Directories.

    Le client Oracle je l'ai aussi et il marche.

    Ce qui me pose encore problème :

    Sous Windows, pour utiliser OCILIB en ANSI, en utilisant les Dlls fournies, il suffit de créer un nouveau projet et :
    - Inclure "ocilib.h"
    - Définir OCI_API=__sdtcall dans les options du préprocesseur du projet
    - Si toutes les variantes ocilib[x].lib sont disponibles pour le linker, il faut alors préciser quel version en insérant #pragma comment(lib, "ocilib[x].lib") dans un des fichiers du projet
    Je ne trouve pas les options du préprocesseur du projet
    La dernière phrase est du chinois pour moi !

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    ce que tu peux faire, dans ton source principal, ajoutes :

    #define OCI_API=__sdtcall
    #include "ocilib.h
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  5. #5
    Membre confirmé Avatar de jack554
    Inscrit en
    Février 2003
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 194
    Par défaut
    J'ai créé ce source (extrait de ton tutoriel) :

    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
     
    include "ocilib.h"
     
    int main()
    {
        if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT))
            return EXIT_FAILURE;
     
        /* ... application code here ... */
     
        OCI_Cleanup();
     
     
        return EXIT_SUCCESS;
    }
    et il me retourne les erreurs suivantes :
    stdlib.h(630,19):Templates and overloaded operators cannot have C linkage
    stdlib.h(638,19):Templates and overloaded operators cannot have C linkage
    PROG02.CPP(5,33):Undefined symbol 'err_handler'

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    1 - tu n'as pas ajouté les items que je t'ai indiqué avant d'inclure ocilib.h
    2 - le source ne correspond pas à la compilation dont tu postes les erreurs puisque 'err_handler' n'est pas présent dans le source posté.
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  7. #7
    Membre confirmé Avatar de jack554
    Inscrit en
    Février 2003
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 194
    Par défaut
    Oui désolé

    Voici le dernier source de ce matin et les erreurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #define OCI_API=__stdcall
    #include <ocilib.h>
     
    int main()
    {
    	if (OCI_Initialize(err_handler, NULL, OCI_ENV_DEFAULT) == FALSE)
         return EXIT_FAILURE;
     
       OCI_Cleanup();
       return EXIT_SUCCESS;
     
    }
    Info :Compiling C:\BC5\BIN\JACQUES\PROG02.CPP
    Error: stdlib.h(630,19):Templates and overloaded operators cannot have C linkage
    Error: stdlib.h(638,19):Templates and overloaded operators cannot have C linkage
    Error: OCILIB.H(1188,27)Declaration terminated incorrectly
    Error: OCILIB.H(1209,27)Declaration terminated incorrectly
    Error: OCILIB.H(1223,23)Declaration terminated incorrectly
    Error: OCILIB.H(1237,23)Declaration terminated incorrectly
    Error: OCILIB.H(1273,33)Declaration terminated incorrectly
    Error: OCILIB.H(1297,23)Declaration terminated incorrectly
    Error: OCILIB.H(1310,23)Declaration terminated incorrectly
    Error: OCILIB.H(1323,23)Declaration terminated incorrectly
    Error: OCILIB.H(1336,36)Declaration terminated incorrectly
    Error: OCILIB.H(1352,35)Declaration terminated incorrectly
    Error: OCILIB.H(1399,36)Declaration terminated incorrectly
    Error: OCILIB.H(1418,27)Declaration terminated incorrectly
    Error: OCILIB.H(1431,27)Declaration terminated incorrectly
    Error: OCILIB.H(1444,32)Declaration terminated incorrectly
    Error: OCILIB.H(1461,27)Declaration terminated incorrectly
    Error: OCILIB.H(1475,33)Declaration terminated incorrectly
    Error: OCILIB.H(1488,33)Declaration terminated incorrectly
    Error: OCILIB.H(1501,33)Declaration terminated incorrectly
    Error: OCILIB.H(1518,27)Declaration terminated incorrectly
    Error: OCILIB.H(1535,23)Declaration terminated incorrectly
    Error: OCILIB.H(1548,33)Declaration terminated incorrectly
    Error: OCILIB.H(1564,23)Declaration terminated incorrectly
    Error: OCILIB.H(1580,23)Declaration terminated incorrectly
    Error: OCILIB.H(1580,23)Too many error or warning messages

  8. #8
    Membre confirmé Avatar de jack554
    Inscrit en
    Février 2003
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 194
    Par défaut
    Si je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define OCI_API __stdcall
    à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define OCI_API=__stdcall
    je n'ai plus que ces deux erreurs :
    Info :Compiling C:\BC5\BIN\JACQUES\PROG02.CPP
    Error: stdlib.h(630,19):Templates and overloaded operators cannot have C linkage
    Error: stdlib.h(638,19):Templates and overloaded operators cannot have C linkage
    Sinon, existe-t-il un petit exemple complet (initialisation, connection, utilisation d'un simple select) qui fonctionne ?

    Merci d'avance

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Tes deux erreurs ne sont pas liées à OCILIB....

    Sinon question exemples, tu as :Sinon voici un exemple simple :

    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
    #include "ocilib.h"
     
    int main(int argc, char *argv[])
    {
        OCI_Connection* cn;
        OCI_Statement* st;
        OCI_Resultset* rs;
     
        OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT);
     
        cn = OCI_ConnectionCreate("db", "usr", "pwd", OCI_SESSION_DEFAULT);
        st = OCI_StatementCreate(cn);
     
        OCI_ExecuteStmt(st, "select intcol, strcol from table");
     
        rs = OCI_GetResultset(st);
     
        while (OCI_FetchNext(rs))
        {
            printf("%i - %s\n"), OCI_GetInt(rs, 1), OCI_GetString(rs,2));
        }
     
        OCI_Cleanup();
     
        return EXIT_SUCCESS;
    }
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Ce que tu peux éventuellement faire, c'est :

    #ifdef__cplusplus
    extern "C"
    {
    #endif

    #include "ocilib.h"

    #ifdef __cplusplus
    }
    #endif
    mais ca voudrait dire que les headers fournis par bc++ sont mal foutus...
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

Discussions similaires

  1. [OCILIB] installation et utilisation OCILIB
    Par wanchy dans le forum Interfaces de programmation
    Réponses: 6
    Dernier message: 27/07/2009, 11h17
  2. Réponses: 1
    Dernier message: 03/04/2009, 14h26
  3. Utilisation des vecteurs sous borland C++
    Par lolita4882 dans le forum C++
    Réponses: 2
    Dernier message: 12/04/2008, 12h08
  4. Pb d'utilisation d'IdHHTP1 d'indy_client sous Borland C++6
    Par rebus73 dans le forum C++Builder
    Réponses: 1
    Dernier message: 25/11/2006, 20h09

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