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 avec une requete


Sujet :

Bases de données Delphi

  1. #21
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Pense à cliquer sur ^^
    Modérateur Delphi

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

  2. #22
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 47
    Points : 29
    Points
    29
    Par défaut
    Ca fonctionne mais c'est vreaiment tres lent (environ 1min)

    Voici ma requete
    adoquery1.SQL.Text:='SELECT A.code_article, A.libelle_long, A.code_modele,P.prix_courant, R.libelle_rayon, F.libelle_famille'
    +#10#13+ 'FROM ((Article as A'
    +#10#13+ 'INNER JOIN Prix_courant as P'
    +#10#13+ 'ON ((A.code_article = P.code_article) and (A.circuitapproaffiche = ''S'') and (A.status_article = ''AC'')))'
    +#10#13+ 'INNER JOIN Rayon as R '
    +#10#13+ 'ON A.code_rayon = R.code_rayon)'
    +#10#13+ 'INNER JOIN Famille as F'
    +#10#13+ 'ON (A.code_famille = F.code_famille) and (F.code_rayon = r.code_rayon)'
    +#10#13+ 'WHERE A.code_article like '+QuotedStr(edit1.Text+'%')
    +#10#13+ 'and A.libelle_long like '+QuotedStr(edit3.Text+'%')
    +#10#13+ 'and A.libelle_long like '+QuotedStr('%'+edit2.Text+'%')
    +#10#13+ 'and R.libelle_rayon like '+QuotedStr(combobox1.text+'%')
    +#10#13+ 'and F.libelle_famille like '+QuotedStr(combobox2.text+'%')
    +#10#13+ 'ORDER BY A.libelle_long';
    La table comprend environ 500 000 références.

    N'y aurait t-il pas un moyen d'accélérer ma requete ?

    Merci

  3. #23
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Tu peux faire apparaitre une fenêtre avec une barre de progression pour faire patienter l'utilisateur ^^

    pour ce faire, il faut que tu mettes l'adoQuery en asynchrone,

    Propriété ExecuteOptions avec
    1. eoAsyncExecute à True
      eoAsyncFetch à True
      eoAsyncFetchNonBlockinng à True


    dans Le onFecthProgress du AdoQuery tu codes la progression de la progressbar

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TfrmMain.ADOQuery1FetchProgress(DataSet: TCustomADODataSet; Progress,
      MaxProgress: Integer; var EventStatus: TEventStatus);
    begin
      ProgressBar1.Max:= MaxProgress;
      ProgressBar1.Position := Progress;
      Application.ProcessMessages;
    end;
    Dans le OnFetchComplete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TfrmMain.ADOQuery1FetchComplete(DataSet: TCustomADODataSet;
      const Error: Error; var EventStatus: TEventStatus);
    begin
      bMaVariableGlobale := True; // on a fini avec la requete pour laisser le programme continuer
    end;
    Et voici comment tu appels

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    bMaVarGlobal := False;
    With AdoQuery do
    begin
      Close;
      // Ici le SQL
      Open;
      // on attend que la requete ce termine pour continuer
      While not bMaVarGlobal do
        Application.ProcessMessages;
    end;
    Sinon pour le temps , tu appels 4 tables dont je ne connais pas les tailles, tu as 5 critères "like" pour le filtre (pas le meilleur pour filtrer), je peux pas te dire si c'est normal ou pas , ou si on peut optimiser.
    Modérateur Delphi

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

  4. #24
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 47
    Points : 29
    Points
    29
    Par défaut
    Errueur
    Un composant de connexion est requis pour Excecueoptions asynchrone
    De quel autre facon est-il possible de filtrer la table ?

  5. #25
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 47
    Points : 29
    Points
    29
    Par défaut
    Resolu le prob de connexion maintenant c'est :
    Violation d'acces à l'adresse 00499CA7

  6. #26
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Fait un pas à pas et motre ton bout de code ou ca plante, car comme avec ce message de violation je peux rien faire.

    [Edit]Petite erreur dans la confguration du AdoQuery, il ne faut aps mettre eoAsyncFetch à true, mais le laisser à false (j'ai vérifié dans le code ou j'utilise cette technique)
    Modérateur Delphi

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

  7. #27
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 47
    Points : 29
    Points
    29
    Par défaut
    le probleme de lenteur viens surtout apparement que la base de donnée est sur un autre poste en réseau.

    Je verais demain pour la progressbar

Discussions similaires

  1. Probleme avec une requete mise a jour
    Par mael94420 dans le forum ASP
    Réponses: 2
    Dernier message: 08/03/2006, 20h56
  2. Probleme avec une requete de selection
    Par vaness59199 dans le forum ASP
    Réponses: 2
    Dernier message: 03/10/2005, 22h42
  3. [weblogic 8.1][JDBC] Probleme avec une requete
    Par Sniper37 dans le forum Weblogic
    Réponses: 3
    Dernier message: 08/04/2005, 11h11
  4. probleme avec une requete full text
    Par maxxou dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/03/2005, 17h20
  5. au secour probleme avec une requete...
    Par soufiane59 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/09/2003, 10h28

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