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

Bases de données Delphi Discussion :

Erreur : OUT OF MEMORY


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2009
    Messages : 42
    Points : 19
    Points
    19
    Par défaut Erreur : OUT OF MEMORY
    Bonjour
    j'ai développer une petite application en delphi 7 sous SQL server 2012 pour la gestion des documents de bord des véhicule (carte grise ,Assurance,et autre documents ...) , le but est d'avoir une base de donnée Image de ces documents c'est a dire créer un dossier véhicule qui aura les informations du véhicule + les images scannées de la carte grise , assurance ...)
    voici un aperçu de mon application :
    Nom : INTERFACE.jpg
Affichages : 352
Taille : 499,0 Ko
    détail :
    • DE : Delphi 7
    • BDD : Microsoft SQL Server Management Studio 2012 v11.0.7001.0
    • table vehicule

    script de la table véhicule
    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
     
    USE [Parc_R] GO
    /****** Object:  Table [dbo].[VEHICULE]    Script Date: 09/04/2019 10:35:08 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[VEHICULE](
    	[COD] [nvarchar](5) NOT NULL,
    	[TYPEV] [nvarchar](25) NULL,
    	[DESIGNATION] [nvarchar](50) NULL,
    	[MARQUE] [nvarchar](25) NULL,
    	[NumINV] [nvarchar](25) NULL,
    	[MATRICULE] [nvarchar](15) NULL,
    	[NumCHASSIE] [nvarchar](50) NULL,
    	[NSERIE] [nvarchar](20) NULL,
    	[DATECOTA] [datetime] NULL,
    	[DATEA] [datetime] NULL,
    	[DATETMD] [datetime] NULL,
    	[DATEPC] [datetime] NULL,
    	[DATECR] [datetime] NULL,
    	[CDS] [nvarchar](4) NULL,
    	[DISTRICT] [nvarchar](4) NULL,
    	[VALEUR] [money] NULL,
    	[COMPTEUR] [int] NULL,
    	[STATUT] [nvarchar](15) NULL,
    	[OBS] [nvarchar](25) NULL,
    	[DATEREP] [datetime] NULL,
    	[DATEAQ] [datetime] NULL,
    	[GENRE] [nvarchar](15) NULL,
    	[ETAT] [bit] NULL,
    	[ETATA] [bit] NULL,
    	[PHOTO] [image] NULL,
    	[CARTEGRISE] [image] NULL,
    	[CARTEGRISE2] [image] NULL,
    	[COTA] [image] NULL,
    	[ASSURANCE] [image] NULL,
    	[PERMICIRCULE] [image] NULL,
    	[TMD01] [image] NULL,
    	[TMD02] [image] NULL,
    	[CARTEROUGE1] [image] NULL,
    	[CARTEROUGE2] [image] NULL,
    	[INDEXE] [int] NULL,
    	[DATEINDEXE] [datetime] NULL,
     CONSTRAINT [PK_VEHICULE] PRIMARY KEY CLUSTERED 
    (
    	 ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    procédure insertion image :
    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
    procedure TDOSSIER.SaveCarteGriseF1(PictureName :String);
    var img:TJPEGImage;
    begin
       img:= TJPEGImage.Create;
       img.LoadFromFile(PictureName) ;
       bmp:= TBitmap.Create;
       bmp.Assign(img);
       img.CompressionQuality := 100; //you decide the value
        with data.ADOCG1 DO
        begin
        data.ADOCG1.Parameters.ParamByName('C').Value:=data.VEHICULECODE.Value;
        data.ADOCG1.Parameters.ParamByName('P').Assign(bmp) ;
        DBImage2.picture.Assign(bmp);
        SetCurrentDir('C:\Gestion_Parc_Roulant\DOSSIER') ;
        ChDir(DBEdit1.Text);
        img.SaveToFile('CARTE-GRISE-01-'+DBEdit1.text+'.jpg' );
         try
         data.ADOCG1.ExecSQL ;
         finally
         img.Free;
         bmp.Free;
         DATA.VEHICULE.Refresh;
         end;
         end;
    end;
    requête sql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE VEHICULE 
    SET VEHICULE .CARTEGRISE =:P
    WHERE VEHICULE .CODE =:C;
    l'application fonctionne correctement mais quand j'ai insérer le 10 ème véhicule une erreur est survenu OUT OF MEMORY comme suite :
    Nom : ERREUR.jpg
Affichages : 318
Taille : 554,9 Ko

    sachant que SQL serveur est illimité je suis un peut perdu dans la configuration de ma base de donnée , je vous demande de m'aider a optimiser mon application ou corriger cette erreur en vous remercions d'avance

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    cela ressemble à une fuite de mémoire (madExcept est très bien pour détecter cela)

    mais déjà je ferais cette modification

    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
     
    procedure TDOSSIER.SaveCarteGriseF1(PictureName :String);
    var img:TJPEGImage;
    begin
       img:= TJPEGImage.Create;
       try
        img.LoadFromFile(PictureName) ;
        bmp:= TBitmap.Create;
        try
           bmp.Assign(img);
           img.CompressionQuality := 100; //you decide the value
            with data.ADOCG1 DO
            begin
              data.ADOCG1.Parameters.ParamByName('C').Value:=data.VEHICULECODE.Value;
             data.ADOCG1.Parameters.ParamByName('P').Assign(bmp) ;
             DBImage2.picture.Assign(bmp);
              SetCurrentDir('C:\Gestion_Parc_Roulant\DOSSIER') ;
              ChDir(DBEdit1.Text);
           img.SaveToFile('CARTE-GRISE-01-'+DBEdit1.text+'.jpg' );
    //     try
              data.ADOCG1.ExecSQL ;
    //     finally
    //     img.Free;
    //     bmp.Free;
           DATA.VEHICULE.Refresh;
    //     end;
         end;
        finally
          bmp.free;
        end;
      finally
       img.Free;  
      end;
    end;
    afin de libérer le jpeg et le bmp dans tous les cas
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2009
    Messages : 42
    Points : 19
    Points
    19
    Par défaut
    MERCI Paul TOTH pour cette optimisation .... concernant madExcept je vais faire une recherche pour savoir utiliser j'ai pas une connaissance sur ça

  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
    Vérifier aussi si c'est un vrai "Out Of Memory"
    En D7 "Out Of Memory" pouvant être déclenché aussi lorsqu'un Handle n'a pas pu être alloué alors que l'on est très loin de 2Go de mémoire consommée
    Le Bitmap, le Canvas, tout ça c'est du Handle

    Faut chercher dans les unités de Delphi, ne pas hésiter à passer en DCU de Débogage
    Tu vas devoir traquer les allocations non libérées
    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

Discussions similaires

  1. erreur Out of memory Error+ java(jb9 sous linux)
    Par Scal-tn dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 23/04/2008, 10h27
  2. Réponses: 12
    Dernier message: 09/08/2007, 12h48
  3. Réponses: 2
    Dernier message: 09/08/2007, 12h35
  4. Erreur "Out Of Memory" sur application en VB4
    Par aokiseiichiro dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 18/07/2007, 17h37
  5. Réponses: 4
    Dernier message: 23/05/2007, 22h29

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