A l'exécution d'un programme de test comprenant les instructions suivantes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3OCILib: 3.9.2 Oracle client/serveur: v8.1 Système: Windows 7 / VS2010
- OCI_ConnectionCreate
- OCI_StatementCreate
- OCI_Prepare
- OCI_Execute
- OCI_GetResultset
Je reçois les mêmes erreurs décrites dans ce post.
Je les recopie ici pour ceux qui feraient une recherche:
Malheureusement, je ne peux changer de version, cas dans lequel le problème n'existait plus pour ce développeur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 code: ORA-0 msg : code: ORA-0 msg : The statement must be prepared TO perform this operation code: ORA-0 msg : The statement must be described TO perform this operation
En debuggant dans les sources d'ocilib, j'ai pu remarquer que dans OCI_Prepare, je ne passais pas dans cet appel d'OCI_HandleAlloc:
Ce qui est logique, puisqu'en compilant pour Windows, OCI_VERSION_COMPILE est égal à OCI_11_2. Du coup on ne teste pas la version runtime.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14#if OCI_VERSION_COMPILE < OCI_9_2 if(OCILib.version_runtime < OCI_9_2) { /* allocate handle */ res = (OCI_SUCCESS == OCI_HandleAlloc((dvoid *) stmt->con->env, (dvoid **) (void *) &stmt->stmt, (ub4) OCI_HTYPE_STMT, (size_t) 0, (dvoid **) NULL)); } #endif
De ce fait, on appelle ensuite un OCI_Execute avec un handle de statement à null.
Je ne me suis pas renseigné, mais je devine que cet appel n'est pas nécessaire pour les versions supérieures ou égales à 9.2 (d'où les if), mais dans mon cas (compilation sous Windows avec la 8.1), il faudrait.
J'ai donc modifié le #if en:
pour que sous Windows dans tous les cas on teste la version runtime, puisqu'on ne connait pas la version à la compilation. Tout semble fonctionné correctement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part #if OCI_VERSION_COMPILE < OCI_9_2 || defined OCI_IMPORT_RUNTIME
Est-ce bien la bonne modification à faire sans compromettre la stabilité de la lib?
Par ailleurs, reprenant du code écrit avec les appels de fonction d'OCI, la lib OCILib est un vrai bonheur!








Répondre avec citation




Partager