Bonjour,
Je recherche a faire une base de données en C et je n'y arrive pas du tout.
Pourriez vous m'aidez ?
Avez-vous une base "dynamique" au niveaux des champs et des lignes de saisie ?
Merci d'avance
Version imprimable
Bonjour,
Je recherche a faire une base de données en C et je n'y arrive pas du tout.
Pourriez vous m'aidez ?
Avez-vous une base "dynamique" au niveaux des champs et des lignes de saisie ?
Merci d'avance
Salut
Ta requête n'est pas très claire. Qu'appelles-tu base de données? Tu parles de la présentation graphique (les champs) ou accéder à une base de données ou .... ?
Détailles un peu plus stp ;)
Nas'
je souhaite creer un tableau dynamique dans lequel on peut creer ou supprimer n'importe quelle ligne ou colonne.
Pour en faire une sorte de base de données
En fait, j ai un fichier source (binaire) qui me donne le label, le type et la taille des champs et un fichier qui contient les données.
De la , je dois afficher sous forme de tableau le contenu de ces informations et pouvoir en faire des extractions.
merci d'avance
malloc() realloc() sont tes amis, mais si tu veux être efficace, il faut récupérer le travail de ceux qui se sont donnés du mal pendant toutes ces années...Citation:
Envoyé par alex_95
- TinySQL
- MySQL
- PostgreSQL etc.
Il y a un forum "Général SGBD" pour commencer, et d'autres forums spécialisés pour continuer...
Le souci, c'est que je dois le faire en C.
En effet, j'ai utilisé Malloc mais sans grand succes.
Je te mets le code en annexe car la compilation ne marche pas...
Si tu vois ou est le pb...
Merci
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265 #include "Table.h" /** \fn Liste menuchamps(Liste l, char * nom) La fonction menuchamps(Liste l, char * nom) prend en parametre la liste des chamsp et le nom de la table. Elle permet de choisir la création d'un nouvel élément majeur à la base: table ou champs. */ void menuchamps(Table t) { int choix, taille, type ; char * lab; while(choix!=0) { printf("Que voulez vous faire?\n"); printf("0: Quitter le menu\n"); printf("1: ajout de champs\n"); scanf("%d", &choix); if(choix == 1) { printf("Nouveau champs : \n"); printf("label :"); scanf("%s", &lab); printf("\ntaille :"); scanf("%d", &taille); printf("\nType: \t 0.caractere \t 1.chaine"); scanf("%d", &type); //listeAjouter(l, creerchamps(t,lab, taille, type)); creerchamps(t, lab,taille,type); } } } /* \fn creerchamps(char * lab, int taille, int type). Cette fonction creerchamps(char * lab, int taille, int type)permet de creer une nouvelle colonne dans la base de donnée. Ces paramètres permettent de définir respectivement l'intitulé de la colonne, la taille maximale de son contenu puis le type de son contenu( caractère ou chaîne de caratère) */ champs * creerchamps(Table t, char * lab, int taille, int type) { printf("creation de champs\n"); Flot temp; temp = creerFlot(char); ouvrir(temp, t->name); champs * ch; ch = (champs * )malloc(sizeof(champs)); ch->label = lab; ch->taille = taille; ch->type = type; int i; for(i=0;i<taillelabel;i++) { mettre(temp,&lab[i]); } mettre(temp,&taille); mettre(temp,&type); return ch; } /* \fn Table creerTable(char * nom). Cette fonction creerTable(char * nom)permet de creer une base dont le nom est le parametre de construction. */ /* Table creerTable(char * nom) { Liste l; l = listeVide(); l = menuchamps(l, nom); creerTable2(nom, l); // return creerTable2(nom, l); } */ Table creerTable() { Table t; t = (Table)(malloc(sizeof(Table))); t->name = (char*)(malloc(sizeof(char))); return t; } /* \fn Table creerChpsSauvegarde(Flot f). Cette fonction creerChpsSauvegarde(Flot f)permet de creer unun champs omniprésent dans chaque base de donnée, permettant de savoir si cette ligne sera à supprimer lors de la prochaine sauvegarde Ce champs est donc appelé Sup, contient un caractère et a donc une taille égale à 1. */ Table creerChpsSauvegarde(Table t) { char lab[taillelabel] = "SUP"; creerchamps(t,lab, 1, 0); } /* \fn void AfficherStructure(Table t,char * nom). La fonction AfficherStructure(Table t,char * nom)permet de montrer la base à l'écran. */ void AfficherStructure(Table t) { int i; Flot f; char * nom; nom = t->name; f = creerFlot(char); strcat(nom,".stc"); ouvrir(f, nom); while(!fdf(f)) { for( i=0; i<=taillechamps;i++) { if(i == taillelabel+1 || i == taillelabel + tailletype+1 || i == taillechamps) printf("|"); if(i == taillechamps) printf("/n"); printf(consulter(f)); prendre(f); } } fermer (f); } /* \fn Table inserer(Table t,char * nom, char * enregistrement, int n). La fonction inserer(Table t,char * nom, char * enregistrement, int n)permet d'ajouter une nouvelle ligne à la place n. */ Table inserer(Table t,char * nom, char * enregistrement, int n) { int i, saut; Flot f2, tmp; tmp = creerFlot(char); f2 = creerFlot(char); ouvrir(tmp, "temp.tp"); saut = n*( taillechamps); strcat(nom,".dat"); ouvrir(f2, nom); for( i = 0 ; i = saut; i++) { prendre(f2); mettre(tmp,enregistrement); } for(i=0; i<= strlen(enregistrement);i++) { mettre(tmp, enregistrement); } while(!fdf(f2)) { prendre(f2); mettre(tmp,enregistrement); } f2 = tmp; fermer(tmp); fermer(f2); } /* \fn Table MAJ(Table t,char * nom, int nligne, int nchps, char * valeur). La fonction MAJ(Table t,char * nom, int nligne, int nchps, char * valeur)met a jour un champs donné d'une ligne donnée. */ Table MAJ(Table t,char * nom, int nligne, int nchps, char * valeur) { int n, nch, borne, saut, i, j, bouchtrou; Flot f; f = creerFlot(char); strcat(nom,".dat"); ouvrir(f, nom); if(nchps == 1) borne = taillelabel; if(nch == 2) { borne = tailletailles; bouchtrou = taillelabel; } if(nch == 3) { borne = tailletype; bouchtrou = taillelabel+tailletailles; } saut = 4*nligne*taillechamps+bouchtrou; //pour acceder au champs j de la nieme ligne for(i = 0 ; i = saut; i++) prendre(f); for (j =0 ; j = borne; j++) { reecrire(f, valeur+j); prendre(f); } fermer(f); } /* \fn Table marquer(Table t,char * nom, int nligne). La fonction marquer(Table t,char * nom, int nligne)permet de simuler l'effacement d'une donnée. */ Table marquer(Table t,char * nom, int nligne) { MAJ(t,nom, nligne, 0 , "*"); } /* \fn Table effacer(Table t, int nligne, int nchamps). La fonction effacer(Table t, int nligne, int nchamps)efface physiquement les lignes précedées de '*' dans le chams Sup. */ Table effacer(Table t, char *nom) { /* creation d un nvo .dat , copie de l original - chps avec '*' */ int i, fin, j; Flot f; f = creerFlot(char); strcat(nom,".dat"); ouvrir(f, nom); fin = nombredeligne(nom); for(i=0; i<=fin;i++) { if(recherche(nom,i, "*")) { for(j=0; j<t->tailleligne; j++) { } } } } /* \fn Table enleverMarquage(Table t). La fonction enleverMarquage(Table t) annule la simulation de supression. */ Table enleverMarquage(Table t) { int i, nligne; char * nom; nom = t->name; strcat(nom,".dat"); nligne = nombredeligne(nom); for(i=0; i<nligne;i++) { MAJ(t,t->name, i, 0 , " "); } } int main() { menuT(); return 0; }
But pédagogique ou professionnel ?
Si c'est pédagogique, essaye de recréer toi même les interrogations de bases de données, avec les cas simples "et" et "ou", non ...
Si c'est professionel alors vois du côté de ce qu'a indiqué Emmanuel.
Tu veux sans doute dire malloc()...Citation:
Envoyé par alex_95
:tagcode: Merci de lire les regles du forum...Citation:
Je te mets le code en annexe car la compilation ne marche pas...
#include "Table.h"
Et pour "Table.h", on doit deviner ? Merci de poster du code complet...
C'est pedagogique.
J ai mis mon code ci dessus car je n'arrive pas a savoir pourquoi ca ne fonctionne pas.
table.h inclut toutes mes librairies sources..
Les specifications des tables et des fonctions pour gerer les flots
Tant que ça ne compile pas, je ne vais pas plus loin.Citation:
Envoyé par alex_95