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 :

OPTIMISER mon code


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier Avatar de valoji
    Inscrit en
    Septembre 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Septembre 2005
    Messages : 124
    Points : 81
    Points
    81
    Par défaut OPTIMISER mon code
    Bonjour,

    Voila j'ai crée une petit appli pour la mise du plan comptable. Sur ma fiche j'ai trois DBgrid rattaché à 3 datasources.

    Mon code fonctionne, mais sur l'xecution il n'est pas trés rapide

    voila 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
    50
    51
     
    function TFic_MAJ_compte.SimilitudeCpte(Cpte : integer; Lettre : String):Boolean;
    var
       i : integer;
       Trouve : Boolean;
    begin
         i := length(IntToStr(Cpte));
         Trouve := False;
         repeat
              if (Query_CTRctrnum.AsString = copy(IntToStr(Cpte),0,i)) and (Query_CTRctrlbu.AsString = Lettre)then Trouve:= True;
              i := i - 1;
         until not (i = 2) or (trouve);
         Result := Trouve;
    end;
     
    procedure TFic_MAJ_compte.Button1Click(Sender: TObject);
    Var
       I, Max : Integer;
       Trouve : Boolean;
    begin
         //Query_erreur.Last;
         Max := Query_erreur.RecordCount;
         ProgressBar1.Max := Max;
         //Query_erreur.First;
         I := 0;
         While not Query_erreur.Eof do
         begin
              // Gestion de la barre de progression
              ProgressBar1.Position := i + 1 ;
              Label5.Caption := IntToStr(i) + '/'  + IntToStr(Max) + ' compte(s)';
              Application.ProcessMessages;
              Query_CTR.First;
              Trouve := False;
              while not Query_CTR.eof and not trouve do
              begin
                   Trouve := SimilitudeCpte(Query_erreurctonum.AsInteger,Query_erreurctolbu.AsString);
                   if Trouve then
                   begin
                        Query_General.SQL.Clear;
                        Query_General.SQL.Add('update Compte_ordonnateur set ctrser = ' + Query_CTRctrser.AsString + ' where ctoser = ' +
                                               Query_erreurctoser.AsString);
                        Query_General.ExecSQL;
                        Memo_Modification.lines.add(Query_CTRctrnum.AsString + ' ' + Query_erreurctonum.AsString + ' ' + Query_erreurctolbu.AsString + ' ' + Query_erreurctoexe.AsString);
                   end;
                   Query_CTR.Next;
              end;
              Query_erreur.Next;
              i := i + 1;
              //if Query_erreurctonum.AsInteger = 158 then break ;
         end;
    end;
    Si vous avez une idée pour un execution plus rapide, je suis preneur.

    MERCI.
    Valoji

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 911
    Points : 6 032
    Points
    6 032
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ProgressBar1.Position := i + 1 ;
    n'est pas utile, puisqu'un ProgressBar dispose d'une méthode pour faire progresser la barre : Stepit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Label5.Caption := IntToStr(i) + '/'  + IntToStr(Max) + ' compte(s)';
    proposition: un label contient une fois pour toute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '/'  + IntToStr(Max) + ' compte(s)'
    un autre est actualisé par -> ne pas recalculer systématiquement IntToStr(Max)
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  3. #3
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut
    une autre optimisation (moins d'adressages ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function TFic_MAJ_compte.SimilitudeCpte(Cpte : integer; Lettre : String):Boolean;
    var
       i ,Longueur: integer;
    begin
         Longueur:=IntToStr(Cpte);
         i := length(Longueur);
         Result := False;
         repeat
              if (Query_CTRctrnum.AsString = copy(Longueur,0,i)) and (Query_CTRctrlbu.AsString = Lettre) then result:= True;
              i := i - 1;
         until (i <> 2) or (result);
    end;
    Sinon, pour le reste, qi130 a déjà tout dit. Quoique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
         Max := Query_erreur.RecordCount;
         ProgressBar1.Max := Max;
    Remplacer par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
         ProgressBar1.Max := Query_erreur.RecordCount;
    Et hop! Une autre variable et adressage en moins
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  4. #4
    Membre régulier Avatar de valoji
    Inscrit en
    Septembre 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Septembre 2005
    Messages : 124
    Points : 81
    Points
    81
    Par défaut
    J'ai crée un Tstringlist alimenter par ma requete dans mon create. Ensuite j'attaque directement ma Tstringlist (Evite d'interroger ma base sur le serveur).

    Je suis passer de 5h De traitement à 15 Mn.

    Je vous remercie pour votre aide

    Valoji.

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

Discussions similaires

  1. [Avis] Optimiser mon code
    Par apokal dans le forum Débuter
    Réponses: 5
    Dernier message: 08/11/2008, 20h05
  2. PreparedStatment : conseils pour optimiser mon code
    Par Monkey_D.Luffy dans le forum JDBC
    Réponses: 8
    Dernier message: 30/05/2008, 13h49
  3. optimiser mon code avec une boucle for?
    Par Invité dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 16/11/2007, 08h33
  4. Réponses: 5
    Dernier message: 23/05/2007, 10h25
  5. Optimiser mon code ASP/HTML
    Par ahage4x4 dans le forum ASP
    Réponses: 7
    Dernier message: 30/05/2005, 10h29

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