Pense à cliquer sur ^^
Pense à cliquer sur ^^
Modérateur Delphi
Le guide du bon forumeur :
- Les règles du forum tu liras
- La FAQ et les tutoriels tu consulteras
- La fonction Recherche tu utiliseras
- Google tu vénèreras
__________
Rayek World : Youtube Facebook
Ca fonctionne mais c'est vreaiment tres lent (environ 1min)
Voici ma requete
La table comprend environ 500 000 références.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';
N'y aurait t-il pas un moyen d'accélérer ma requete ?
Merci
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
- eoAsyncExecute à True
eoAsyncFetch à True
eoAsyncFetchNonBlockinng à True
dans Le onFecthProgress du AdoQuery tu codes la progression de la progressbar
Dans le OnFetchComplete
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;
Et voici comment tu appels
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;
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.
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;
Modérateur Delphi
Le guide du bon forumeur :
- Les règles du forum tu liras
- La FAQ et les tutoriels tu consulteras
- La fonction Recherche tu utiliseras
- Google tu vénèreras
__________
Rayek World : Youtube Facebook
Errueur
De quel autre facon est-il possible de filtrer la table ?Un composant de connexion est requis pour Excecueoptions asynchrone
Resolu le prob de connexion maintenant c'est :
Violation d'acces à l'adresse 00499CA7
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 :
- Les règles du forum tu liras
- La FAQ et les tutoriels tu consulteras
- La fonction Recherche tu utiliseras
- Google tu vénèreras
__________
Rayek World : Youtube Facebook
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager