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 :

Mémoire insuffisante


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    cjo
    cjo est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 42
    Par défaut Mémoire insuffisante
    Bonjour, j'ai une boucle dans laquelle j'exécute 2 requêtes SQL à partir de Query. Ces requêtes sont déclarées avant la boucle et libérées après. Pour ces requêtes, il y a des paramètres.
    La première est une de recherche la deuxième soit une de création soit une de modification.

    Après un certain nombre de passage dans la boucle, le message "Mémoire insuffisante... " apparaît.

    J'ai fait le test de création et de libération des query dans la boucle, cela ne change rien.

    Meric.

    cjo.

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Fait voir ton code ca pourra nous donner une piste
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    cjo
    cjo est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 42
    Par défaut Informations complémentaires sur mémoire insuffisante.
    Voici mon code
    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
     
        qtana := TQuery.Create(self);
        with qtana do begin
            DatabaseName := 'gcm6';
            SQL.Text := 'Select a_code, a_lib from ana where a_code = :code';
        end;
     
        qtnewAna := TQuery.Create(self);
        with qtnewAna do begin
            DatabaseName := 'gcm6';
            SQL.Text := 'Insert into ana(a_code, a_nuseq, a_lib, a_nom) values(:code, :nuseq, :lib, :nom)';
        end;
     
        qtmajana := Tquery.Create(self);
        with qtmajana do begin
            DatabaseName := 'gcm6';
            SQL.Text := 'update ana set a_lib = :lib where a_code = :code';
        end;
     
     
        for i := 0 to 1000 do begin
            // Rechercher les analyses.
            qtana.Active := false;
            qtana.Params[0].AsString := codeana + inttostr(i);
            qtana.ExecSQL;
            qtana.Active := true;
            //si l'analyse n'existe pas.
            if qtana.RecordCount = 0 then begin
                qtnewana.Active := false;
                qtnewana.Params[0].AsString := code  + inttostr(i);
                qtnewana.Params[1].AsFloat := strtofloat(nuseq + inttostr(i));
                qtnewana.Params[2].AsString := lib + inttostr(i);
                qtnewana.Params[3].AsString := nom;
                qtnewana.ExecSQL;
            end else if qtana.RecordCount = 1 then begin
                //si l'analyse existe, mettre à jour le libellé si nécessaire.
                if (lib <> qtana.FieldByName('a_lib_lg').AsString) then begin
                    qtmajana.Active := false;
                    qtmajana.Params[0].AsString := lib + inttostr(i);
                    qtmajana.params[1].AsString := code + inttostr(i);
                    qtmajana.ExecSQL;
                 end;
            end;
        end;
     
        showmessage('fin');
        qtana.Free;
        qtnewana.Free;
        qtmajana.Free;
    Merci.
    cjo
    [Modération, NoisetteProd : Pensez à utiliser la balise [CODE] qui améliore la lisibilité, merci]

  4. #4
    Membre confirmé Avatar de EssaiEncore
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Par défaut
    J'ai deja rencontrer se probleme bon nombre de fois et cela n'est pas toujours du au code.
    Pour ma part, selon sur quel pc je programme, je ne peut pas ouvrir plusieurs projets Delphi, voir meme avoir plusieurs logiciel qui tourne et lancer le compilateur sous faute d'avoir "MEMOIRE insuffisante".

  5. #5
    cjo
    cjo est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 42
    Par défaut Mémoire insuffisante
    J'ai fait le test sur plusieurs PC, cela ne change rien.
    En fait le code que je test est isolé. Il fait partie d'un programme que j'ai déjà fait tourné sur plusieurs PC et ma conclusionifnale: Cale vient du petit bout de code que je vous ai communiqué.

    Merci.

    cjo

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut Re: Informations complémentaires sur mémoire insuffisante.
    Version un peu corriger de ton code car y a quelques petites bourdes (pas mechante les bourdes :p)

    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
     
        qtana := TQuery.Create(self);
        with qtana do begin
            DatabaseName := 'gcm6';
            SQL.Text := 'Select a_code, a_lib from ana where a_code = :code';
        end;
     
        qtnewAna := TQuery.Create(self);
        with qtnewAna do begin
            DatabaseName := 'gcm6';
            SQL.Text := 'Insert into ana(a_code, a_nuseq, a_lib, a_nom) values(:code, :nuseq, :lib, :nom)';
        end;
     
        qtmajana := Tquery.Create(self);
        with qtmajana do begin
            DatabaseName := 'gcm6';
            SQL.Text := 'update ana set a_lib = :lib where a_code = :code';
        end;
     
      try
        for i := 0 to 1000 do begin
            // Rechercher les analyses.
            qtana.Close; // mieux qu'un active := false puis moins long a ecrire ;)
            qtana.Params[0].AsString := codeana + inttostr(i);
            Qtana.Open;
    //        qtana.ExecSQL; c'est mieux avec open pour un simple select
    //        qtana.Active := true; inutile on l'ouvre déjà une fois
            //si l'analyse n'existe pas.
            case qtana.RecordCount of
            0: begin
                qtnewana.Close;
                qtnewana.Params[0].AsString := code  + inttostr(i);
                qtnewana.Params[1].AsFloat := strtofloat(nuseq + inttostr(i));
                qtnewana.Params[2].AsString := lib + inttostr(i);
                qtnewana.Params[3].AsString := nom;
                qtnewana.ExecSQL;
            1: begin
                //si l'analyse existe, mettre à jour le libellé si nécessaire.
                if (lib <> qtana.FieldByName('a_lib_lg').AsString) then begin
                    qtmajana.Close;
                    qtmajana.Params[0].AsString := lib + inttostr(i);
                    qtmajana.params[1].AsString := code + inttostr(i);
                    qtmajana.ExecSQL;
                 end;
            end;
            else begin
              Showmessage('Tient !!! une valeur pas attendue!!');
              // la tu traites au cas où les cas de doublons
            end;
        end;
     
        showmessage('fin');
      finally // au cas ou ca se passe mal ca libère les objets
        qtana.Free;
        qtnewana.Free;
        qtmajana.Free;
      end;
    Voila un peu optimisé (tres simple l'optimisation mais bon ca peut pas faire de mal)

    gcm6 c'est le nom de ton composant connexion ?
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  7. #7
    cjo
    cjo est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 42
    Par défaut Mémoire insuffisante
    Merci,

    Les petites modifications effectuées semblent résoudre le problème.

    Gcm6, c'est le nom de la connexion.

    Merci.

    cjo

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mémoire insuffisante
    Par jeropierre dans le forum Windows XP
    Réponses: 6
    Dernier message: 22/03/2006, 21h17
  2. [CR][VB.NET] Message : mémoire insuffisante
    Par arno2000 dans le forum SDK
    Réponses: 1
    Dernier message: 22/12/2005, 14h52
  3. message d'erreur "Mémoire insuffisante"
    Par jakouz dans le forum Langage
    Réponses: 3
    Dernier message: 25/10/2005, 15h41
  4. Mémoire insuffisante
    Par lenouvo dans le forum MFC
    Réponses: 6
    Dernier message: 31/08/2005, 10h14
  5. Mémoire insuffisante sous Dos
    Par Bubonik software dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 20/09/2003, 11h35

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