Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3539 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [Pro*C]Se connecter a Oracle avec DevC++

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Pro*C]Se connecter a Oracle avec DevC++

n°1699556
pierrefoot
Posté le 09-03-2008 à 19:08:59  profilanswer
 

Bonsoir,
 
Voici une semaine que je suis en train d'essayer de me connecter a une base de donnée sous Oracle, créee sur ma machine (petite base de donnée).
J'ai besoin d'utiliser le langage Pro*C pour pouvoir exécuter des instructions SQL dans mon langage C. Oui mais voilà, je dois tout d'abord réussir a me connecter a cette fichue base de donnée.
 
J'ai essayé avec DevC++ ou Visual Studio mais rien y fait, je n'arrive pas a générer un foutu fichier qui pourrait ressembler a quelque chose se rapprochant du Pro*C. Je précise que mes capacités sont quand même très limitées.
Je n'ai même pas de code a vous proposer, juste que je dois réussir a me connecter a cette base de donnée Oracle (sysdba je suppose). J'ai bien essayé d'inclure des bibliothèques sous les logiciels pré-cités mais je ne vois pas comment faire la liaison entre DevC++ et Oracle.
 
Si une bonne âme passe par ici...
 
Merci d'avance :)  !

mood
Publicité
Posté le 09-03-2008 à 19:08:59  profilanswer
 

n°1699562
ptitchep
Posté le 09-03-2008 à 19:25:31  profilanswer
 

Ils ont l'air de savoir faire ici:
 
http://www.developpez.net/forums/a [...] 80542.html
 


---------------
deluser --remove-home ptitchep
n°1700152
pierrefoot
Posté le 10-03-2008 à 20:16:44  profilanswer
 

Merci de la réponse.
 
J'ai bien suivit les instructions, mais impossible de savoir si j'arrive a me connecter a ma BDD locale.
J'arrive a obtenir un .c (après compliation du C) , dans lequel je peux mettre du C, les commandes SQL ont l'air d'être reconnues.
Seulement avec la commande suivante :
 
EXEC SQL BEGIN DECLARE SECTION;
 
char  log[]="system";
char pass[]="monpass";
char  hote[]="sysdba";
int codecommune;  
int postal;
EXEC SQL END DECLARE SECTION;
 
EXEC SQL CONNECT :log IDENTIFIED BY :pass USING :hote;
 
Quand je lance le .exe , je sens bien que celui ci charge, mais impossible de savoir si la connections a été établie (je ne pense pas vu que les requêtes ne s'exécutent pas ensuite).
Existe ils une commande permettant de savoir si la connection a été effectué?
 
Merci !
 

n°1700446
olivthill
Posté le 11-03-2008 à 12:12:40  profilanswer
 

Voici un extrait d'un programme Pro*C que j'avais écris et qui marchait :


#include <stdio.h>
#include <stdlib.h>
 
EXEC SQL INCLUDE SQLCA;
EXEC SQL INCLUDE ORACA;
 
/* ======================================================================
   Recupere des infos sur la derniere erreur
   ====================================================================== */
int db_erreur(void)
{
 log_write("Erreur Oracle : dernier SQL : %s.\n",
     oraca.orastxt.orastxtc);
 log_write("message court : %d, %s.\n",
           sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
 if (sqlca.sqlcode < 0) {
  char msg_buffer[1000];
  int buf_size;
  int msg_lg;
  buf_size = 1000;
  sqlglm(msg_buffer, &buf_size, &msg_lg);
  log_write("message long : %*.*s.\n", msg_lg, msg_lg, msg_buffer);
 }
 return (0);
}
 
/* ======================================================================
   Connexion a la base
   ====================================================================== */
int db_connect(char *p_user, char *p_pass, char * p_dbstring)
{
 EXEC SQL BEGIN DECLARE SECTION;
  VARCHAR username[20];
  VARCHAR password[20];
  VARCHAR dbstring[100];
 EXEC SQL END DECLARE SECTION;
 
 strcpy(username.arr, p_user);
 username.len = strlen(username.arr);
 strcpy(password.arr, p_pass);
 password.len = strlen(password.arr);
 strcpy(dbstring.arr, p_dbstring);
 password.len = strlen(password.arr);
 
 EXEC SQL CONNECT :username IDENTIFIED BY :password USING :dbstring;
 EXEC ORACLE OPTION (ORACA=YES);
 oraca.oradbgf = 1;  /* enable all debug operations */
 oraca.orastxtf = 1; /* save the SQL statement text on SQLERROR only */
 if (sqlca.sqlcode < 0) {
  db_erreur(); return (-1);
 }
 log_write("Connection OK.\n" );
 return (0);
 }


n°1701240
pierrefoot
Posté le 12-03-2008 à 16:37:23  profilanswer
 

Tout d'abord merci pour la réponse, je test ca ce soir.
 
Par contre j'aurais besoin d'encore une petite aide concernant le programme en lui même (oui encore :) ) !
 
J'explique mon cas : j'arrive a executer une requete SQL dans le main, mais impossible de faire passer en parametre de fonction une valeur initialisé dans le main. La requete SQL de la fonction me previent que l'identificateur est inconnu (car il n'est pas présent dans les DECLARE SECTION de la fonction, mais bien du main).
Voici un aperçu du problème :
 

Citation :


int main(void)
{
EXEC SQL BEGIN DECLARE SECTION;
long SQLCODE;
...
char SQLSTATE[6];
char nom_com[35]="Paris";
EXEC SQL END DECLARE SECTION;
 
int code;
 
EXEC SQL CONNECT :ETD IDENTIFIED BY :ETD USING :HOTE; // il arrive bien a se connecter
 
code=retourner_code_commune(nom_com);
printf("Code commune : %d",code);
...
}
 
int retourner_code_commune(char nom_com[35])
{
EXEC SQL BEGIN DECLARE SECTION;
int code_commune;
EXEC SQL END DECLARE SECTION;
 
EXEC SQL
 SELECT CODECOMMUNE
INTO :code_commune
FROM COMMUNES
WHERE NOMCOMMUNE = :nom_com;
 
printf("Nom commune : %s",nom_com);
printf("Code commune %d",code_commune);
return code_commune;
}


J'ai essayé d'afficher Nom commune : il affiche bien paris. Cependant quand j'execute ce code, il me dit que l'identificateur :nom_com est inconnu (c'est mon paramètre de fonction). Les types semblent correspondre avec la BDD.
Une idée?
Merci :) !

n°1702344
olivthill
Posté le 14-03-2008 à 12:04:55  profilanswer
 

Citation :

il n'est pas présent dans les DECLARE SECTION de la fonction


Il faut le déclarer dans la DECLARE SECTION, et il est alors inutile de le redéclarer en dehors.
Ou bien, on peut avoir une variable dans la DECLARE SECTION et une variable en dehors, et faire un copy de l'une vers l'autre avant ou après une requête.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [Pro*C]Se connecter a Oracle avec DevC++

 

Sujets relatifs
Problème de connection Oracle depuis ASP[Résolu][Oracle 10g] Quels paramètres pour EXP ?
[Oracle SQL] problème de script SettingsOracle - besoin d'aide pour un outer join
problème de selection de date dans ma requête oracleequivalent ORACLE de INTERVAL mysql
[Oracle] Sauvegarde online[PHP] oracle et paramètre de type date ( ou alors sysdate ;) )
Oracle: Probleme création de tableOracle : ADD CONSTRAINT impossible
Plus de sujets relatifs à : [Pro*C]Se connecter a Oracle avec DevC++


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)