D'où provient l'erreur suivante : Mémoire insuffisante pour cette opération
Comment la régler ?
SVP.
D'où provient l'erreur suivante : Mémoire insuffisante pour cette opération
Comment la régler ?
SVP.
De plein de chose non libéré !
Une boucle qui alloue trop de chose ...
Question vague sans code, impossible d'être précis !
Quelle est l'exception EOutOfRessource (Trop de Handle), EOutOfMemory (Trop de RAM consommé)
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
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
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 unit UFacture; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, DBTables, DBCtrls, ExtCtrls, Grids, DBGrids, Mask, Buttons; type TFacture = class(TForm) Panel1: TPanel; Label1: TLabel; Tablefacture: TTable; DSfacture: TDataSource; Label2: TLabel; Label3: TLabel; Label4: TLabel; DBText1: TDBText; BitBtn1: TBitBtn; Label6: TLabel; Label7: TLabel; DBEdit1: TDBEdit; Panel2: TPanel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; DBText5: TDBText; DBText6: TDBText; Panel3: TPanel; DBGrid1: TDBGrid; new: TBitBtn; ok: TBitBtn; annuler: TBitBtn; fermer: TBitBtn; Tablefactureprod: TTable; DSfactureprod: TDataSource; BitBtn2: TBitBtn; DBEdit3: TDBEdit; DBEdit4: TDBEdit; DBText2: TDBText; suppr: TBitBtn; DBComboBox1: TDBComboBox; Query1: TQuery; Query1Total_HT: TFloatField; Label8: TLabel; DBEdit2: TDBEdit; DataSource1: TDataSource; DBNavigator1: TDBNavigator; Label5: TLabel; DBEdit5: TDBEdit; nfacture: TDBEdit; TablefactureprodNFacture: TFloatField; TablefactureprodCode_client: TFloatField; TablefactureprodReference_produit: TStringField; TablefactureprodDesignation: TStringField; TablefactureprodQuantite: TFloatField; TablefactureprodPrix_Unitaire: TFloatField; TablefactureprodTotal_HT: TFloatField; TablefactureprodTotal_TVA: TFloatField; TablefactureprodTotal_TTC: TFloatField; TablefactureprodTotal_regle: TFloatField; TablefactureprodDate: TDateField; TablefactureprodTva: TFloatField; TablefactureprodMontant: TCurrencyField; procedure DBGrid1EditButtonClick(Sender: TObject); procedure newClick(Sender: TObject); procedure fermerClick(Sender: TObject); procedure annulerClick(Sender: TObject); procedure okClick(Sender: TObject); procedure TablefactureprodCalcFields(DataSet: TDataSet); procedure BitBtn2Click(Sender: TObject); procedure supprClick(Sender: TObject); procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure BitBtn1Click(Sender: TObject); procedure TablefactureBeforePost(DataSet: TDataSet); procedure TablefactureNewRecord(DataSet: TDataSet); private { Private declarations } public { Public declarations } end; var Facture: TFacture; implementation uses UnitArticles, UProduit, Liste_client; {$R *.dfm} procedure TFacture.DBGrid1EditButtonClick(Sender: TObject); begin list_Articles.ShowModal; if list_Articles.Modalresult=1 then begin Tablefactureprod.edit; TableFactureprodreference_produit.Value:=list_Articles.DBGrid1.columns[0].field.value; TableFactureproddesignation.Value:=list_Articles.DBGrid1.columns[1].field.value; TableFactureprodprix_unitaire.Value:=list_Articles.DBGrid1.columns[4].field.value; Tablefactureprod.post; end; end; procedure TFacture.newClick(Sender: TObject); begin Tablefactureprod.Insert; end; procedure TFacture.annulerClick(Sender: TObject); begin if Tablefactureprod.RecordCount<1 then Tablefacture.Delete; Tablefactureprod.cancel; end; procedure TFacture.BitBtn2Click(Sender: TObject); begin Tablefactureprod.Edit; end; procedure TFacture.okClick(Sender: TObject); begin if Tablefactureprod.state in [dsinsert,dsedit] then begin Tablefactureprod['Nfacture']:=Tablefacture['Nfacture']; Frmproduit.Tableproduit.edit; Frmproduit.Tableproduit['Quantite']:=Frmproduit.Tableproduit['Quantite']-Tablefactureprod['Quantite']; Frmproduit.Tableproduit.post; Tablefactureprod.post; end; end; procedure TFacture.fermerClick(Sender: TObject); begin Close; end; procedure TFacture.TablefactureprodCalcFields(DataSet: TDataSet); begin TablefactureprodMontant.Value:=TablefactureprodQuantite.Value*TablefactureprodPrix_Unitaire.Value; end; procedure TFacture.supprClick(Sender: TObject); begin if MessageDlg('Voulez vous vraiment supprimer cet enregistrement',mtConfirmation,[mbYes,MbNo],0)=MrYes then Tablefactureprod.Delete; end; procedure TFacture.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn); begin if Tablefactureprod.RecordCount<1 then Tablefacture.Delete; Tablefactureprod.Cancel; end; procedure TFacture.FormClose(Sender: TObject; var Action: TCloseAction); begin if tablefactureprod.RecordCount<1 then Tablefacture.Delete; Tablefactureprod.Cancel; end; Procedure TFacture.BitBtn1Click(Sender: TObject); begin list_Client.ShowModal; if list_Client.Modalresult=1 then begin Tablefactureprod.edit; TableFactureprodCode_client.Value:=list_client.DBGrid1.columns[0].field.value; end; end; procedure TFacture.TablefactureBeforePost(DataSet: TDataSet); begin if Tablefacture.State in [dsinsert,dsEdit] then begin TablefactureNfacture.Value:=TablefactureNfacture.Value+1; end; Tablefacture.Post; end; procedure TFacture.TablefactureNewRecord(DataSet: TDataSet); begin TablefactureNfacture.Value:=TableFactureNfacture.Value+1; TablefactureDate_facture.Value:=Now; TablefactureTotal_HT.Value:=0; TablefactureTotal_TVA.Value:=0; TablefactureTotal_TTC.Value:=0; TablefactureTotal_regle.Value:=0; TablefactureReste_regler.Value:=0; end; end.
Tu devrais apprendre à utiliser le forum !
c'est l'icone # dans la barre d'outil texte
Merci pour le code, quelle ligne de code émet donc une erreur ?
On ne peut pas deviner
DBGrid1EditButtonClick : Etrange l'affectation depuis le DBGrid !
Dans un OnEditButtonClick, tu ouvres un formulaire qui modifie le DataSet associé au DBGrid, je suppose, ton DBGrid est en ReadOnly, normalement dans OnEditButtonClick, on vérifie la colonne en cours, pour lancer un Editeur par colonne, tu sembles modifier la ligne entière, étrange procédé !
Attention, list_Articles.DBGrid1.columns[0].field, ce n'est pas très prudent, faudra surtout pas changer l'ordre, pourquoi ne pas avoir déclarer des TField ou utiliser FieldByName
Etrange d'avoir un DBGrid comme OnEditButtonClick, c'est un selecteur genre une ComboBox multi-colonne ?
tu as plusieurs DataSet : Tableproduit, Tablefactureprod, Tablefacture.
Je suppose que Tablefactureprod est la relation N-N entre Tableproduit et Tablefacture
DBGrid1 à la fois dans TFacture et list_Articles, rien de mieux pour confondre !
Très Etrange l'alternance Delete\Cancel
D'ailleurs, si tu utilises DBNavigator pourquoi faire le code manuellement, sache qu'il fait automatiquement, le Edit, Post, Delete, Cancel ...
En fait, tu dois faire DEUX fois le Delete\Cancel dans DBNavigator1Click, d'ailleurs, il faut tester le TNavigateBtn pour savoir quel bouton est cliqué, tu as aussi BeforeAction qui serait plus adéquat dans ton cas (un abort abandonne l'action il me semble)
Evite d'utiliser directement les fenêtres via leur variable globale comme Frmproduit, un passage d'objet en paramètre ou un Datamodule à la rigueur est plus élégant
ModalResult, teste plutôt sur mrOK que sur 1
FormClose ? encore Delete\Cancel, c'est pour empêcher une Facture sans article, attention RecordCount, tu as activé un Filter pour limiter uniquement sur les enregistrements de la Facture ou un jeu de Master\Detail (en édition, je ne l'ai jamais expérimenté)
Si pas de Filter, tu vas avoir TOUS les Factures, et donc pas seulement celle en cours de saisie !
Avec une vraie DB, ce genre de chose se gère avec des Transactions, tu devrais plutôt étudier InterBase, FireBird ou MySQL, bien plus intéressante pour leur gestion en SQL que Paradox (totalement obsolète depuis 10 ans)
Pour finir, à l'école on n'apprend plus la séparation Présentation\Données ? un speudo MVC, j'ai appris le Java, c'est vrai que sans Builder, cela forçait de séparer le code, avec Delphi, facile de faire tout en un !
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Bonjour !
Je me permet de suivre à cette discution qui commence à dater !
Pour ma part, j'ai l'erreur quand je lance souvent mon exe depuis Delphi (en execute ou débug). Elle est accompagnée d'une exception EDBEngineError...
Sur le site d'Embarcadero j'ai vu ceci :
Du coup je ne sais pas trop à quoi peut être due l'erreur... Je ne connais pas bien le fonctionnement de Delphi malheureusement Serait-ce à cause d'un nombre de connexions non fermées correctement?EDBEngineError est la classe des exceptions pour les erreurs du moteur de Database Borland (BDE).
EDBEngineError est déclenchée quand se produit une erreur du BDE. Sa propriété Errors contient des objets TDBError.
Quand des exceptions EDBEngineError sont déclenchées à la conception, elles apparaissent dans une boîte de dialogue spéciale (dans Delphi, TDBEngineErrorDlg) qui affiche la pile complète des erreurs BDE. A l'exécution, les exceptions EDBEngineError non gérées génèrent la même boîte de message que les autres exceptions.
Au passage, comment résoudre ce problème sans redémarré le PC? (C'est la seule 'parade' que j'ai trouvé pour le moment )
Merci par avance,
ZenZiTone.
un pour ce déterrage en plus d'une question hors sujet de départ !
le BDE (obsolète je le rappelle) à beaucoup de problèmes de comportement avec les Windows ayant l'UAC (donc tout les Windows si on prend en compte le fait que XP est devenu Obsolète depuis hier)
Donc : Ouvrir un sujet en précisant la version d'OS ne serait pas un luxe
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
Je me rappel que j'ai eu le même problème, et c'était à cause d' un champ calculé, redéclare ton champ calculé prodmontant avec le type float au lieu de bdc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 TablefactureprodMontant: TFloatField;
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager