Bonjour
Comment ajouter un champ a ma base de donnée BDE d'une facon dynamique.
c.a.d par programme.
Merci de votre aide.
Version imprimable
Bonjour
Comment ajouter un champ a ma base de donnée BDE d'une facon dynamique.
c.a.d par programme.
Merci de votre aide.
Salut;
voilà
l'exemple est tiré de l'aide de Delphi alors penser toujours à F1Code:
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 withTable1 do begin Active :=False; DatabaseName :='DBDEMOS'; TableType :=ttParadox; TableName :='CustInfo'; {Ne remplace pas une table existante } ifnotTable1.Exists then begin {Le composant Table ne doit pas être actif } {Commence par décrire le type de table et àlui } {donner un nom } {Décrit ensuite les champs de la table } withFieldDefs do begin Clear; withAddFieldDef do begin Name :='Field1'; DataType :=ftInteger; Required :=True; end; withAddFieldDef do begin Name :='Field2'; DataType :=ftString; Size :=30; end; end; {Décrit ensuite tous les index } withIndexDefs do begin Clear; {Le 1er index n'a pas de nom car il s'agit {d'une cléprimaire Paradox } withAddIndexDef do begin Name :=''; Fields :='Field1'; Options :=[ixPrimary]; end; withAddIndexDef do begin Name :='Fld2Indx'; Fields :='Field2'; Options :=[ixCaseInsensitive]; end; end; {Appelle la méthode CreateTable pour créer la table } CreateTable; end; end;
merci de m'avoir rappelez l'importance de la touche F1.
Les index existe deja dans la table ; pourqoui les decrire une deuxieme fois ?
le rappel est bon pour tout le monde :lol:
en fait, faut tester si ton fichier existe avec FileExists si c'est le cas alors ne redéfini pas tes index ajoutes-on les champs manquant.
Par curiosité est ce qu'ont peut supprimer un champ de la base de donneé
par programme avec la methode withDelFieldDef si elle existe au lieu de withAddFieldDef.
On dit bien que la curiosite est un vilain defaut ?
Tout à fait sauf que la table doit être native (à ce que je pense faut quand même vérifier ça de plus près).
J'ai codé un peu dans l'exemple fourni avec delphi et voilà ce que ça donne:
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 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, DBTables, Grids, DBGrids; type TForm1 = class(TForm) bCreation: TButton; Table1: TTable; bSuppression: TButton; ListBox1: TListBox; procedure bCreationClick(Sender: TObject); procedure ListBox1Click(Sender: TObject); procedure bSuppressionClick(Sender: TObject); procedure FormActivate(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; var Form1: TForm1; implementation {$R *.dfm} {*************************************************************************** j'ai rajouté, pour les besoins de l'exemple deux boutons et une liste - bouton création de la table qui fait appel au code fourni avec delphi afin de créer une table à deux champs - bouton suppression d'un champs existant qui se charge de supprimer un champs de la table - liste pour visualiser les champs de la table ***************************************************************************} procedure TForm1.bCreationClick(Sender: TObject); var i : byte; begin ListBox1.Clear; with Table1 do begin Active := False; DatabaseName :='DBDEMOS'; TableType :=ttParadox; TableName :='CustInfo'; {Ne remplace pas une table existante } if not Table1.Exists then begin {Le composant Table ne doit pas être actif } {Commence par décrire le type de table et à lui } {donner un nom } {Décrit ensuite les champs de la table } with FieldDefs do begin Clear; with AddFieldDef do begin Name :='Field1'; DataType :=ftInteger; Required :=True; end; with AddFieldDef do begin Name :='Field2'; DataType :=ftString; Size :=30; end; end; {Décrit ensuite tous les index } with IndexDefs do begin Clear; {Le 1er index n'a pas de nom car il s'agit {d'une cléprimaire Paradox } with AddIndexDef do begin Name :=''; Fields :='Field1'; Options :=[ixPrimary]; end; with AddIndexDef do begin Name :='Fld2Indx'; Fields :='Field2'; Options :=[ixCaseInsensitive]; end; end; {Appelle la méthode CreateTable pour créer la table } CreateTable; end; end; // ce que j'ai ajouté à l'exemple de delphi { ouverture de la table lecture des info concernant les champs remplissage du listbox } Table1.Open; for i := 0 to Table1.FieldCount - 1 do begin ListBox1.Items.Add(Table1.Fields[i].FieldName); end; end; // ***************************************************************************// // ici commence le code ajouté //***************************************************************************// procedure TForm1.ListBox1Click(Sender: TObject); begin // le bouton supprimer n'est activé que s'il y a // un élément de la liste qui est sélectionne bSuppression.Enabled := (ListBox1.Selected[ListBox1.ItemIndex]) end; procedure TForm1.bSuppressionClick(Sender: TObject); var i : byte; nom_champ : string; begin with Table1.FieldDefs do begin nom_champ := Table1.Fields[ListBox1.ItemIndex].FieldName; if MessageDlg('Attention vous allez supprimer le champs : [' + nom_champ + '] Continuer?', mtConfirmation, [mbYes, mbCancel], 0) = mrYes then begin // récupérer le numéro du champs à supprimer i := ListBox1.ItemIndex; // appel de la méthode Delete pour supprimer le champs Delete(i); // synchroniser la liste ListBox1.Items.Delete(i); end end; // activer désactiver le bouton supprimer selon la liste bSuppression.Enabled := (ListBox1.Items.Count > 0); end; procedure TForm1.FormActivate(Sender: TObject); var i : byte; begin ListBox1.Clear; Table1.Open; for i := 0 to Table1.FieldCount - 1 do begin ListBox1.Items.Add(Table1.Fields[i].FieldName); end; end; end.