Bonjour à tous,
Voici le topo.
J'ai un TFrame avec un LookupComboBox contenant une liste de clients.
à Chaque sélection de client depuis le LookupCombobox, je lance une requête SQL afin de ramener les informations nécessaire concernant ce client.
Dès fois, suivant la quantité des informations et le réseau, la requête prends plus de temps et freeze la fenêtre de l'application.
Donc j'ai décidé de déporter l'exécution de la requête dans un TThread et récupère les résultat comme ceci
Donc ce que je fait dès qu'il y a sélection de client
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 TUniQueryThread = class(TThread) private FConnection : TUniConnection; FQuery : TUniQuery; FFrame : TFrameCustomer; FSQL : String; published property Query : TUniQuery read FQuery; property Connection : TUniConnection read FConnection; property Frame : TFrameCustomer read FFrame; property SQL : String read FSQL write FSQL; constructor Create(AFrame : TFrameCustomer); destructor Destroy; override; procedure BuildSQL; procedure Execute; override; procedure TransferData; end; ..... ..... procedure TUniQueryThread.Execute; begin CoInitialize(nil); try BuildSQL; FQuery.Open; Synchronize(TransferData); finally CoUninitialize; end; end; ..... .....
- Vérifier que ce n'est pas le même client
- Créer le Thread et l’exécute
- Récupère les données via TransferData
- Le thread est automatiquement détruit à la fin.
Je trouve que ceci fait beaucoup de create/free du coup je me suis demander s'il est possible de
- Créer un thread lors de la création de la Frame
- Réutiliser le Thread à chaque sélection de client
- Détruire le thread lors de la destruction de la Frame.
Ceci est un domaine que je ne maitrise pas encore donc je compte sur votre lumière.
Merci à vous
Andry
Partager