bonjour,
J'ecris le resultat d'une requete dans un fichier
j'ai un curseur, un fetch_tab, ouvrir fichier, ecris_fichier
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
21
22
23
24 int dec_cur() { char sOrdre[4000] ; VARCHAR SqlOrdre[4000] ; EXEC SQL WHENEVER SQLERROR GOTO erreurdec; sprintf (sOrdre, "SELECT * FROM matable); printf ("ordre sql %s \n", sOrdre) ; S_TO_V ( &SqlOrdre, sOrdre) ; EXEC SQL PREPARE REQ_ZCOM FROM :SqlOrdre ; EXEC SQL DECLARE C1 CURSOR FOR REQ_ZCOM ; EXEC SQL OPEN C1; return(0); erreurdec: erreur_ORACLE("1 Erreur dans la declaration de curseur"); exit(c_iERRPROC); }
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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 int fetch_tab() { EXEC SQL WHENEVER SQLERROR GOTO erreurfet; EXEC SQL WHENEVER NOTFOUND GOTO fintrt; memset ((char*)&struct_resultat,0,sizeof(struct_resultat)) ; if (!fin_tab) { /* lecture d un enregistrement de la table */ EXEC SQL FETCH C1 INTO :struct_resultat.nom, :struct_resultat.prenom, :struct_resultat.adr, :struct_resultat.age, :struct_resultat.sexe, :struct_resultat.nblivre; return sqlca.sqlerrd[2]; } else { return sqlca.sqlerrd[2]; } fintrt: printf ("Fichier crée\n"); fin_tab=1; return sqlca.sqlerrd[2]; erreurfet: printf ("Erreur fetch\n"); exit(c_iERRPROC); return sqlca.sqlerrd[2]; }un extrait de mon main
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 void ecris_fichier(FILE* fichier) { fprintf(fichier,"%s;%s;%s;%d;%s;%d\n", SupprimerBlancsFinChaine(struct_resultat.nom), SupprimerBlancsFinChaine(struct_resultat.prenom), SupprimerBlancsFinChaine(struct_resultat.adr), struct_resultat.age, SupprimerBlancsFinChaine(struct_resultat.sexe), struct_resultat.nblivre); }
avant mon main
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 /* ============================= */ /*Ouverture du fichier de sortie*/ /* ============================= */ fichier = ouvre_fichier(NomFichier,"w"); printf("\n Création du fichier\n"); while (fin_tab==0) { nb_elt=fetch_tab(); printf("\n nb_elt->%d \n",nb_elt); if(!fin_tab) { ecris_fichier(fichier); } (struct_resultat)); } fclose(fichier); }
le fichier ce creer bien lorsqu'il y a peu de données a ecrire, mais quand il y' en a bcp plus ça ne marche plu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 typedef struct { char nom[3 +1]; char prenom[3 + 1]; char adr[4 + 1]; int age; char sexe[1 + 1]; int nblivre; }t_struct_resultat; static t_struct_resultat struct_resultat; EXEC SQL INCLUDE sqlca;
d'apres ce que j'ai vu nb_elt n'est pas tjs =1
j'en deduis qu'il n'ecris pas ligne a ligne (comme je le pensais) mais bloc par bloc.
je ne sais pas ecrire des blocs de données. (j'ai vu la notion de buffer mais je ne vois pas comment l'appliquer).
Merci
Partager