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++ : 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 #define OCI_CHARSET_ANSI #include "ocilib.h" #include <string> #include <iostream> using namespace std; void err_handler(OCI_Error *err) { cerr << "ERROR detected !!!" << endl; cerr << " code: ORA-" << OCI_ErrorGetOCICode(err) << endl; cerr << " msg : " << OCI_ErrorGetString(err) << endl; cerr << " sql : " << OCI_GetSql(OCI_ErrorGetStatement(err)) << endl << endl; } int main(int argc, char* argv[]) { string stBidon; OCI_Connection *cn; OCI_Statement *st; OCI_Resultset *rs; OCI_Column *col; unsigned int nb; boolean ret; if (!OCI_Initialize(err_handler,NULL,OCI_ENV_DEFAULT)) { cerr << " Could not intialize OCI - aborting program !" << endl; return 1; } cn = OCI_ConnectionCreate("database","name","passwd",OCI_SESSION_DEFAULT); if (cn!=NULL) { st = OCI_StatementCreate(cn); ret = OCI_Prepare(st, "select * from all_tables"); if (ret == FALSE) cerr << " pos : " << OCI_GetSqlErrorPos(st) << endl; ret = OCI_Execute(st); if (ret == FALSE) cerr << " pos : " << OCI_GetSqlErrorPos(st) << endl; rs = OCI_GetResultset(st); OCI_ConnectionFree(cn); } OCI_Cleanup(); cout << "Execution OK !" << endl << "Press <RETURN> to exit" << endl; getchar(); return 0; }
Le résultat que j'obtient sur la console est le suivant:
La première erreur provient du OCI_Prepare, la deuxième du OCI_Execute, et la troisième du OCI_GetResultset. Les deux dernières sont évidentes puisque le premier a raté, mais si quelqu'un pouvait me dire pourquoi le OCI_Prepare renvoie un false, cela m'arrangerait beaucoup car je suis complètement dans la panade.
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 ERROR detected !!! code: ORA-0 msg : sql : select * from all_tables pos : 0 ERROR detected !!! code: ORA-0 msg : The statement must be prepared to perform this operation sql : select * from all_tables pos : 0 ERROR detected !!! code: ORA-0 msg : The statement must be described to perform this operation sql : select * from all_tables Execution OK ! Press <RETURN> to exit
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
Partager