|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Inscription : mai 2009 Messages : 5 ![]() |
Bonjour à tous,
Je suis en train d'essayer de me connecter à une base de données Oracle 9.1 avec OCILIB 3.9.0 sous Visual Studio 2008. J'ai correctement déclaré la librairie dans le projet, le projet se compile sans erreur ni warning, les procédures OCI_ConnectionCreate et OCI_StatementCreate se passent correctement (j'obtient un statement qui n'est pas nul), mais quand je veux exécuter un OCI_Prepare ou un OCI_ExecuteStmt, les fonctions renvoient un false. Le code en question est ci-dessous: Code C++ :
Le résultat que j'obtient sur la console est le suivant: Code :
J'ai essayé avec différentes requêtes, d'un côté sur Query reporter, et de l'autre sur le programme ci-dessus; et à chaque fois elles fonctionnent sur Query reporter et pas sur mon C++. Merci de votre aide, Henri |
||||
|
|
00
|
|
|
#2 | ||
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
1 - j'ai éxécuté ton code sur ma machine (j'ai seulement remplacé les << par des printf) et tout fonctionne correctement :
Code :
Dans ton output à toi, le premier passage dans err_hander() genère une erreur interne pas oracle, utilise OCI_ErrorGetInternalCode() et OCI_ErrorGetString() pour avoir plus d'infos
__________________
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 |
||
|
00
|
|
|
#3 | |||||
|
Invité de passage
![]() Inscription : mai 2009 Messages : 5 ![]() |
Merci pour la réponse.
Je me suis trompé pour la base c'est du Oracle 9.2 et pas 9.1 comme je l'avais dit dans mon premier post. L'interrogation en suivant ce qui est proposé dans le tutoriel OCILIB donne: Code :
Code :
J'ai Oracle 9 installé sur ma machine, mais je ne suis pas sûr de la version exacte (comment peut-on déterminer cela ?). Pour info, le fichier oraclient.dll a pour numéro de révision 9.0.1.1.1 (propriétés Windows). Ma machine tourne sous Windows XP SP3. Citation:
OCI_ErrorGetInternalCode() me donne le même résultat que OCI_ErrorGetOCICode(), c'est-à-dire 0. OCI_ErrorGetString() était déjà appelé dans err_handler(), et il renvoie une string vide. Avec un code d'erreur nul et un message vide, en plus du fait de savoir que le code est syntaxiquement correct, je doit avouer que je ne vois plus ce que je peux faire pour essayer de pointer sur la source du problème. Est-ce que quelqu'un aurait des pistes d'investigation ? Merci beaucoup, Henri |
|||||
|
|
00
|
|
|
#4 |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
quelle LIB/DLL de ocilib utilises tu ? (ociliba.x ,ocilibm.x ou ocilibw.x)
deifnits tu un OCI_CHARSET_XXX dans ton projet ?
__________________
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 |
|
00
|
|
|
#5 | |
|
Invité de passage
![]() Inscription : mai 2009 Messages : 5 ![]() |
Citation:
Comme indiqué dans mon premier post (ligne 1 du code C++), je spécifie: #define OCI_CHARSET_ANSI Par contre, je me demande s'il pourrait y avoir un problème d'installation incomplète de mon client oracle. J'ai bien un client oracle fonctionnel, car les outils de gestion de configuration qui utilisent le client fonctionnent sans problème, le SQL*Plus qui a été installé avec le client fonctionne parfaitement bien mais, quand j'ai voulu recompiler ocilib avec mon projet (pour tracer la source du pbm), je n'ai pas trouvé de source oci sur mon ordi, ni même de dll oci. Se pourrait-il que mon installation soit incomplète ? Merci, Henri |
|
|
|
00
|
|
|
#6 |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
si sqlplus fonctionne, ocilib le doit aussi...
par contre tu es sur de bien linker bien ociliba.lib ? si oui, le probleme doit venir de la config....
__________________
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 |
|
00
|
|
|
#7 |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
ce que tu peux faire pour en être sur, c'est de récupérer un instant client sur le site d'oracle et specifier dans OCI_Initialize() en 2eme param le répertoire ou tu aura décompréssé l'instant client. Et pour OCI_ConnectionCreate(), pour le param db, utilise une chaine de connexion easy connnect "ip:port/service_name"
__________________
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 |
|
00
|
|
|
#8 | |
|
Invité de passage
![]() Inscription : mai 2009 Messages : 5 ![]() |
Citation:
Par ailleurs, j'ai essayé de copier les librairies oci (un ensemble de fichier .h dont oci.h, oci.lib et oci.dll) d'un autre pc pour les mettre sur le mien. Tout compile sans problème, mais à l'exécution, le OCI_Initialize() génère une erreur "Cannot create OCI environment", avec le OCI_ErrorGetInternalCode() qui donne 23. J'ai téléchargé l'instant client sur le site d'Oracle, et j'ai fait ce qui était demandé dans le dernier post. OCI_Initialize() se passe bien, mais le OCI_ConnectionCreate() crashe avec le message "ORA-12705: Cannot access NLS data files or invalid environment specified". OCI_ErrorGetInternalCode() donne 0. Aucune idée de ce qui ne va pas ? Merci beaucoup, Henri |
|
|
|
00
|
|
|
#9 | ||
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
si tu utilise un instant client, tu dois utiliser OCI_Initiliaze() et OCI_ConnectionCreate() de cette maniere :
Code :
__________________
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 |
||
|
00
|
|
|
#10 | |
|
Invité de passage
![]() Inscription : mai 2009 Messages : 5 ![]() |
Citation:
Entretemps, j'ai demandé à mon service informatique de me désinstaller le client Oracle, et de m'installer la version 10.2 avec l'API OCI, et depuis le programme fonctionne sans problème. Encore merci pour toute ton aide, Vincent. Henri |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com