#include #include #include #define size_t long EXEC SQL INCLUDE SQLCA.H; EXEC SQL INCLUDE SQLDA.H; EXEC SQL INCLUDE ORACA.H; void connexion() { VARCHAR uid[50]; char login[20]; char passwd[20]; printf("\n"); strcpy(uid.arr,"palafour2"); strcat(uid.arr,"/"); strcat(uid.arr,"palafour2"); strcat(uid.arr,"@kirov"); uid.len=strlen(uid.arr); EXEC SQL CONNECT :uid; if (sqlca.sqlcode==0) printf(" Connexion réussie avec succès.\n\n"); else { printf ("Problème à la connexion.\n\n"); exit(1); } } void deconnexion(int validation) { if (validation == 1) { EXEC SQL COMMIT WORK RELEASE; } else { EXEC SQL ROLLBACK WORK RELEASE; } printf("\nDéconnexion sans problème.\n"); } void sql_error(char *msg) { char err_msg[128]; long buf_len, msg_len; EXEC SQL WHENEVER SQLERROR CONTINUE; printf("%s\n", msg); buf_len = sizeof (err_msg); sqlglm(err_msg, &buf_len, &msg_len); if (msg_len > buf_len) msg_len = buf_len; printf("%.*s\n", msg_len, err_msg); deconnexion(0); exit(1); } void traitErreur(char *msg) { EXEC SQL WHENEVER SQLERROR CONTINUE; printf("%s\n", msg); deconnexion(0); exit(1); } void saisie(void) { varchar nocl[4]; varchar nom[80]; varchar ville[80]; int cp; printf("Saisir une nouveau client \n"); printf("Entrer le nom du client : "); scanf("%s",nom.arr); nom.len=strlen(nom.arr); printf("Entrer la ville du client : "); scanf("%s",ville.arr); ville.len=strlen(ville.arr); printf("Entrer le code postal du client : "); scanf("%d",&cp); printf("Entrer le code du client : "); scanf("%s",nocl.arr); nocl.len=strlen(nocl.arr); EXEC SQL WHENEVER SQLERROR DO sql_error("Oracle error\n"); EXEC SQL INSERT INTO TClient2017 VALUES (:nocl,:nom,:ville,:cp); EXEC SQL COMMIT; } void modification(void){ varchar noclchange[4]; varchar nomnew[80]; varchar villenew[80]; int cpnew; varchar nomold[80]; varchar villeold[80]; int cpold; printf("Modifier un client \n"); printf("Entrer le code du client a modifer : "); scanf("%s",noclchange.arr); noclchange.len=strlen(noclchange.arr); EXEC SQL WHENEVER SQLERROR DO sql_error("Oracle error\n"); EXEC SQL SELECT nom, ville, postal INTO :nomold, :villeold, :cpold FROM Tclient2017 WHERE NOCLIENT = :noclchange; printf("Nom: %s \n",nomold.arr); printf("Ville: %s \n",villeold.arr); printf("CP courant du client: %d \n ",cpold); printf("Modifier le nom du client : "); scanf("%s",nomnew.arr); nomnew.len=strlen(nomnew.arr); printf("Modifier la ville du client : "); scanf("%s",villenew.arr); villenew.len=strlen(villenew.arr); printf("Modifier le code postal du client : "); scanf("%d",&cpnew); EXEC SQL UPDATE TClient2017 SET nom = :nomnew, ville = :villenew, postal = :cpnew WHERE noclient = :noclchange; EXEC SQL COMMIT; } void suppression(void){ varchar noclchange[4]; varchar nomnew[80]; varchar villenew[80]; int kmdeb; int kmfin; varchar noveh[4]; varchar datedeb[30]; varchar dateretour[30]; int fini=1; printf("Supprimer un client \n"); printf("Entrer le code du client a supprimer : "); scanf("%s",noclchange.arr); noclchange.len=strlen(noclchange.arr); EXEC SQL DECLARE locencours CURSOR FOR SELECT noveh, datedeb, kmdeb, dateretprev FROM Tlocation2017 WHERE noclient =:noclchange ; EXEC SQL DECLARE locretour CURSOR FOR SELECT noveh, datedeb, kmdeb, kmfin, dateretour FROM Tlocatretour2017 WHERE noclient =:noclchange ; EXEC SQL OPEN locencours; while (fini=1) { EXEC SQL FETCH locencours INTO :noveh, :datedeb, :kmdeb, :dateretour; printf("noveh: %s datedeb: %s kmdeb : %d date retour: %s \n",noveh.arr,datedeb.arr,kmdeb,dateretour.arr); if (sqlca.sqlcode == 1403) fini=0; } printf("en retour \n"); EXEC SQL CLOSE locencours; EXEC SQL OPEN locretour; fini=1; while (fini=1) { EXEC SQL FETCH locretour INTO :noveh, :datedeb, :kmdeb, :kmfin, :dateretour; printf("noveh: %s datedeb: %s kmdeb : %d kmfin : %d date retour: %s \n",noveh.arr,datedeb.arr,kmdeb,kmfin,dateretour.arr); if (sqlca.sqlcode == 1403) fini=0; } printf("Suppression en cours"); EXEC SQL CLOSE locretour; EXEC SQL DELETE FROM Tlocation2017 WHERE noclient =:noclchange ; EXEC SQL DELETE FROM Tlocatretour2017 WHERE noclient =:noclchange ; EXEC SQL COMMIT; } void afficherclient (void){ varchar noclient[4]; varchar nom[80]; varchar ville[80]; int postal; int fini=1; printf("Affiche les clients \n"); EXEC SQL DECLARE clients CURSOR FOR SELECT noclient, nom, ville, postal FROM Tclient2017; EXEC SQL OPEN clients; while (fini=1) { EXEC SQL FETCH clients INTO :noclient, :nom, :ville, :postal; printf("numero client: %s nom: %s ville : %s CP: %d \n",noclient.arr,nom.arr,ville.arr,postal); if (sqlca.sqlcode = 1403) fini = 0; } printf(" Fini \n"); EXEC SQL CLOSE clients; } void afficherlocation (void){ varchar nocl[4]; varchar nom[100][10]; varchar noveh[5]; varchar immat[50][10]; varchar datedeb[50][30]; varchar dateretour[50][30]; int i; printf("Affiche les locations d'un client \n"); printf("Entrer le numera du client : "); scanf("%s",nocl.arr); nocl.len=strlen(nocl.arr); EXEC SQL SELECT immat, datedeb, dateretour INTO :immat, :datedeb, :dateretour FROM Tvehicule2017, Tlocatretour2017 WHERE Tlocatretour2017.nocl = :nocl and Tlocatretour2017.noveh = Tvehicule2017.noveh ; printf("Il y a %d lignes selectionnees\n",sqlca.sqlerrd[2]); i=0; while (i