IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Mémoire insuffisante pour cette opération


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    14
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 14
    Points : 11
    Points
    11
    Par défaut Mémoire insuffisante pour cette opération
    D'où provient l'erreur suivante : Mémoire insuffisante pour cette opération
    Comment la régler ?

    SVP.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    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

  3. #3
    Membre à l'essai
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    14
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    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.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    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

  5. #5
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    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 :
    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.
    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?

    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.

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    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

  7. #7
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 138
    Points : 113
    Points
    113
    Par défaut
    Citation Envoyé par NAHAC Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    unit UFacture;
    TablefactureprodMontant: TCurrencyField;
    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;

Discussions similaires

  1. Mémoire insuffisante pour l'opération lors du chargement du .crt
    Par pdelorme dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 16/05/2012, 07h23
  2. [XL-2003] microsoft forms mémoire insuffisante pour cette opération
    Par tomo80 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/07/2011, 13h42
  3. Mémoire insuffisante pour cette opération
    Par CaptainSmoker dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/04/2011, 17h52
  4. Réponses: 0
    Dernier message: 24/07/2007, 11h38
  5. Réponses: 5
    Dernier message: 12/02/2007, 13h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo