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 :

Probleme sur tables de grande taille


Sujet :

Bases de données Delphi

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Probleme sur tables de grande taille
    voila mon programme:
    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
    if (MD.LFACTMODIF.Value= '0') and
      ( (FAPP.TypeP='BL')or(FAPP.TypeP='RF')or (FAPP.TypeP='CS') // sortie
        or (FAPP.TypeP='BR')or(FAPP.TypeP='RC') ) // entree
      then begin //PIECE
        MD.DFACT.DisableControls;
        MD.LFACTMODIF.Value:= '1';
        MD.DFACT.First;
        while not MD.DFACT.Eof do begin
          MD.TART.
          if MD.TART.Locate('CODE_ART',VarArrayOf([MD.DFACTCODE_ART.Value]),[])then begin
            MD.TART.Edit;
            //MD.DFACT.Edit;
            if (FAPP.TypeP='BL')or(FAPP.TypeP='RF')or(FAPP.TypeP='CS') then begin //TP
              MD.TARTQTTEC.Value:=MD.TARTQTTEC.Value-MD.DFACTQTE.Value;
     
            end
            else
            begin
                if (FAPP.TypeP='BR') then
                begin
                  if MD.TARTPMP.Value= 0 then MD.TARTPMP.Value:=MD.DFACTPRXAR.Value
                  else MD.TARTPMP.Value:=((MD.TARTPMP.Value*MD.TARTQTTEC.Value)+
               (MD.DFACTPRXAR.Value*MD.DFACTQTE.Value))
               /(MD.TARTQTTEC.Value+MD.DFACTQTE.Value);
                  MD.TARTPXACH.Value:=MD.DFACTPRXAR.Value;
                end;
                MD.TARTQTTEC.Value:=MD.TARTQTTEC.Value+MD.DFACTQTE.Value;
     
                := Q;
            end;//TP
            MD.TART .Post;
          end;//Locate
          MD.DFACT.Next;
        end;//While
      MD.DFACT.EnableControls;
      end;//PIECE

    la question est la table MD.TART contient environ 100 000 enregistrements sachant que j'ai define index sur champ CODE_ART et moi utiliser le firebird le probleme est : mon programme est bloquer comment faire pour resoudre ce probleme?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 343
    Points : 392
    Points
    392
    Par défaut
    Je dis sans doute une bêtise:
    A la place des conditions "if then" si tu remplaçais par des requêtes SQL(tes conditions deviennent des filtres WHERE. Avantage tu ne travailles que sur le volume de ta reqête et pas sur toute la table: (tu fractionnes ainsi tes 100000 enregistrements, si la repartition pour chaque conditions est à peu près homogène).
    Ces requêtes pourrait êtres des procédures stockées ce qui aurait pour avantage dêtre plus rapide (agir au niveau de la base).

    Je n'ai pas regardé en détail ton code, mais parfois l'ordre des tests permet de faire quelques optimisations, surtout lorsque certaine conditions sont remplis très rarement.

    Ce ne sont que queleques idées générales...

    Bon courage

  3. #3
    Membre averti Avatar de Bejaia-In
    Inscrit en
    Avril 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 365
    Points : 392
    Points
    392
    Par défaut
    L'utilisation d'une ou pls requette(s) est toujours recommandé dans pareil cas et a forte raison avec une base de milliers d'enregistrements.

    Avec le SQL, vous pouvez faire tout ce que vous voulez.

    bonne chance.
    ....................................................................
    Aidez-vous... Dieu vous aideras et nous aussi..
    ....................................................................

Discussions similaires

  1. Manipulation tables de grandes tailles
    Par didier roustand dans le forum Débutez
    Réponses: 4
    Dernier message: 18/03/2010, 11h55
  2. probleme sur form et grande police
    Par Flopp dans le forum C#
    Réponses: 2
    Dernier message: 20/11/2009, 11h52
  3. [MySQL] Probleme sur tables jointes
    Par idamarco dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/03/2009, 15h50
  4. [Historicité] Probleme sur Table Personne
    Par wolfy60 dans le forum HyperFileSQL
    Réponses: 3
    Dernier message: 25/02/2006, 08h08
  5. [firebird 1.5] Probleme sur tables de grande taille
    Par iguanevif dans le forum Débuter
    Réponses: 2
    Dernier message: 12/08/2004, 13h33

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