Bonjour, dans le cadre d'un projet (c++) je dois me connecter a une BD oracle 9i locale, mais j'avoue que je suis perdu, je ne sais pas comment je vais faire.
Pouvez vous m'indiquer une API simple a utiliser?
Merci d'avance.
Bonjour, dans le cadre d'un projet (c++) je dois me connecter a une BD oracle 9i locale, mais j'avoue que je suis perdu, je ne sais pas comment je vais faire.
Pouvez vous m'indiquer une API simple a utiliser?
Merci d'avance.
bonjour,
En C++, tu as OCCI qui est relativement simple et PRO*C/C++
Sinon, la plus simple est OCILIB qui est une API C et utilisable en C++.(Tuto sur OCILIB ici)
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
super tuto vicenzo merci beaucoup.
![]()
Bon j'ai telecharger ocilib mais je suis coincé, j'ai pas su comment configurer visual c++ 6 pour que je puisse l'utiliser. Le tuto n'est pas clair sur ce point.
Quelqu'un sait comment faire ?
Merci.
quelles sont les erreurs ?
Extrait du tuto
Pour résumer :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
- Tu places ocilib.h dans un répertoire d'includes connu de VC ou tu ajoutes le répertoire src d'ocilib au répertoire d'include sde VC
- Tu ajoutes #pragma comment(lib, ociliba.lib) au source principal de ton appli
- Tu inclus ocilib.h dans ton appli
- tu ajoutes OCI_API=__sdtcall dans les options du préprocesseur du 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
Ben j'ai mis ocilib. dans le dossier du projet, ainsi que les .dll et .lib et j'ai testé avec le code suivant:
les erreus:
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 #include <iostream> using namespace std; #define OCI_API __stdcall #define OCI_IMPORT_RUNTIME #define OCI_CHARSET_ANSI #pragma comment(lib, ociliba.lib) #include "ocilib.h" int main() { if (OCI_Initialize(NULL, NULL,NULL) == FALSE) return EXIT_FAILURE; /* ... code application ... */ OCI_Cleanup(); return 0; }
main.obj : error LNK2001: unresolved external symbol _OCI_Cleanup@0
main.obj : error LNK2001: unresolved external symbol _OCI_Initialize@12
Place plutôt la définition de OCI_API et OCI_IMPORT_RUNTIME dans les options du préprocesseur
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
Bon,
J'ai pris VC6 et fais un petit test. J'ai
- crée un nouveau projet
- crée un fichier main.c (code ci après)
- ajouté dans les options du projet, onglet C/C++, , champ preprocessor definitions : OCI_API=__stdcall,OCI_IMPORT_RUNTIME
- ajouté le répertoire src du package ocilib dans les options de VC, onglet directories, item répertoire d'includes
- ajouté le repertoire lib du package ocilib dans les options de VC, onglet directories, item répertoire de librairies
- et tout compile correctement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 #include "ocilib.h" #pragma comment(lib, "ociliba.lib") int main() { OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT); OCI_Cleanup(); return 0; }
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
j'ai trouvé ! j'ai fait un clic droit sur le projet +clean (pour eliminer les fichiers intermediaires) et j'ai modifier le #pragma
Au fait ça sert a quoi un #pragma ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part #pragma comment(lib,"ociliba.lib")
![]()
Bon j'ai un autre probleme maintenant , je ne suis pas arrivé a me connecter a la BD malgré plusieurs tentatives.
voila le code:
Je sûr de mont mdp , nom utilisateur et le nom de la BD.
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 int main() { OCI_Initialize(NULL, NULL,OCI_ENV_DEFAULT) ; if (OCI_Initialize(NULL, NULL,NULL) == false) return EXIT_FAILURE; OCI_Connection *cn=NULL; cout<<"here"<<endl; cn = OCI_CreateConnection("home", "moi","motedepasse",OCI_SESSION_DEFAULT); if (cn!=NULL) { cout<<"ok"<<endl; } else { cout<<"echec conection "<<endl; } OCI_FreeConnection(cn); OCI_Cleanup(); return 0; }
Que faire ?
quel est ton client oracle ?
quel est le contenu de ton tnsname.ora ?
Utilises tu 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
J'utilise oracle 9i et la BD est locale.
Voila le contenu de mon tnsname.ora:C'est quoi un instant client ?
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 # TNSNAMES.ORA Network Configuration File: F:\oracle\ora90\network\admin\tnsnames.ora # Generated by Oracle configuration tools. HOME = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = louwled)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = home) ) ) INST1_HTTP = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = louwled)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = SHARED) (SERVICE_NAME = MODOSE) (PRESENTATION = http://HRService) ) ) EXTPROC_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ) (CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO) ) )
Pour savoir la cause de l'erreur, ajoute un error handler.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 void errorHandler(OCI_Error *err) { cout << "ERROR : " << OCI_ErrorGetString(err) << endl; }OCI_Initialize() ne doit être appelée qu'une seule fois
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if (OCI_Initialize(errorHandler, NULL, OCI_ENV_DEFAULT) == FALSE) return EXIT_FAILURE;
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part ERROR : ORA-12154: TNS : l'identificateur de connexion indiqué n'a pas pu etre résolu![]()
Et avec sqlplus avec les mêmes paramètres, ça marche ?
Peux tu poster le contenu de ton sqlnet.ora ?
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
J'ai trouvé comment faire, j'ai suivi la solution de ce post
J'ai remarqué une erreur dans ton tuto:
J'ai réussi a insérer une ligne dans la base mais lorsque je consulte la base je constate que les modifications n'ont pas été enregistré.OCI_Connection *cn;
OCI_Statement *st;
/* ... */
st = OCI_CreateStatement(cn);
OCI_ExecuteStmt(st, "delete from my_table where code is null");
printf("%d row deleted", OCI_GetAffectedRows(st));
OCI_FreeStatement(st);
/* ... */
Que faire ?
Il faut valider tes modifs par OCI_Commit()
tu peux aussi passer en mode auto-commit avec OCI_SetAutoCommit()
PS : merci pour la coquille dans le tuto....je vais corriger ca.
PS : penses à marquer le topic comme résolu !
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
Merci pour ton aide.
ADO, DAO en font-ils partie ? ADO est-il une API ou quoi ?[c++]quelle API ?
Partager