Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Interfaces de programmation
Interfaces de programmation Forum d'entraide sur l'utilisation des API Oracle : Pré-compilateurs, OCI, OCCI, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/06/2011, 16h45   #1
Invité de passage
 
Inscription : juin 2011
Messages : 2
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 2
Points : 0
Points : 0
Par défaut [OCILIB] Problème Requete Oracle (Delete & Insert)

Bonjour à tous,

J'ai un problème avec ocilib, lorsque je souhaite faire une requête INSERT ou DELETE, l'action n'est pas effectuée. L'application ne renvoi aucune erreur.

Voici mon code :

Code :
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
 
	//REQUETE DELETE
 
        //TEST SI OCI CORRECTEMENT INITIALISE
	IF (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT)) MessageBox::SHOW("Problème Oracle");
	else 
	{
		MessageBox::SHOW("Oracle OK");
		OCI_Connection *cn;
		OCI_Statement  *st;
		OCI_Resultset  *rs;
 
		char * adresse = "127.0.0.1:1521/XE";
		char * login = "XXX";
		char * pwd = "XXX";
 
		cn = OCI_ConnectionCreate(adresse, login, pwd, OCI_SESSION_DEFAULT);
 
                //TEST CONNEXION ETABLIE
		IF (cn != NULL)
		{
			MessageBox::SHOW("Connection OK");
			st = OCI_StatementCreate(cn);
			OCI_ExecuteStmt(st, "DELETE FROM client");
			OCI_Commit(cn);
			OCI_StatementFree(st);
		}
		OCI_ConnectionFree(cn);
	}
	OCI_Cleanup();
A savoir que tous les messages OK s'affichent dont la connexion est bonne.
Seule les requêtes de type Select fonctionnent.
La requête DELETE FROM client marche parfaitement sous SqlDeveloper.
J'ai suivi ce super tuto de Vincent Rogier : http://vicenzo.developpez.com/tutoriels/c/ocilib/
Et j'ai utilisé la librairie A (ansi).
Par contre je n'ai pas pu trouver où mettre le OCI_API : __sdtcall donc je ne sais pas si ca joue.

Merci à ceux qui se pencheront sur le problème d'un étudiant un peu perdu.
ckamaury est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 17h06   #2
Rédacteur/Modérateur
 
Avatar de Vincent Rogier
 
vincent rogier
Inscription : juillet 2007
Messages : 2 355
Détails du profil
Informations personnelles :
Nom : vincent rogier
Âge : 34

Informations forums :
Inscription : juillet 2007
Messages : 2 355
Points : 3 108
Points : 3 108
Salut,

il faut toujours avoir une gestion des erreurs soit contextuellement soit de maniere globale.


Ajoute une fonction :

Code :
1
2
3
4
5
6
7
8
9
10
11
void err_handler(OCI_Error *err)
{
    printf(
                "code  : ORA-%05i\n"
                "msg   : %s\n"
                "sql   : %s\n",
                OCI_ErrorGetOCICode(err), 
                OCI_ErrorGetString(err),
                OCI_GetSql(OCI_ErrorGetStatement(err))
           );
}
et passe le error handler à OCI_Initialize() :

Code :
1
2
 
    IF (!OCI_Initialize(err_handler, NULL, OCI_ENV_DEFAULT)) MessageBox::SHOW("Problème Oracle");
__________________
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
Vincent Rogier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 17h31   #3
Invité de passage
 
Inscription : juin 2011
Messages : 2
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 2
Points : 0
Points : 0
Salut Vincent,

Réaction super rapide, merci pour ce super tutoriel pour la connection Oracle.
Je venais juste de trouver une solution alernative, en remplaçant l'execute par un block de PL/SQL.

Code :
1
2
OCI_Prepare(st, "begin DELETE FROM client; commit; end;");
OCI_Execute(st);
Puis finalement j'ai tester le premier code après avoir fermer sql_dev et miracle ca fonctionne.
Je pense donc que le fonction Commit(); devait être bloqué par mon sql_dev.

Merci aussi pour la fonction pour les erreurs

Bonne soirée.
Romain
ckamaury est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 17h33   #4
Rédacteur/Modérateur
 
Avatar de Vincent Rogier
 
vincent rogier
Inscription : juillet 2007
Messages : 2 355
Détails du profil
Informations personnelles :
Nom : vincent rogier
Âge : 34

Informations forums :
Inscription : juillet 2007
Messages : 2 355
Points : 3 108
Points : 3 108
you're welcome
__________________
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
Vincent Rogier est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h39.


 
 
 
 
Partenaires

Hébergement Web