TQuery et thread

Fandril Messages postés 6 Date d'inscription lundi 11 août 2003 Statut Membre Dernière intervention 11 décembre 2003 - 30 oct. 2003 à 10:33
Fandril Messages postés 6 Date d'inscription lundi 11 août 2003 Statut Membre Dernière intervention 11 décembre 2003 - 10 nov. 2003 à 13:14
Est ce que quelqu un a deja mis un TQuery (pour executer requete SQL select sur Paradox) dans un thread...

Car ca marche mais ca met 10 secondes pour faire un malheureux select (les autres threads font presque rien)...

Est ce que c'est parce que TQuery n'est pas compatible avec les threads...

Merci de votre aide

6 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
30 oct. 2003 à 20:05
Aucun composant VCL n'est compatible avec les threads ("VCL components are not threadsafe"). Sinon à quoi ça servirait que la méthode Synchronize se décarcasse ? ;)

1/- Les TQuery sont tout à fait utilisables dans des threads secondaires.
2/- le BDE est multisession

Pour celà, il faut respecter un principe : les requêtes doivent alors être exécutées dans une autre session.
Comment faire : déclarer un autre identifiant de session dans la propriété SessionName du composant TQuery.
Pour faciliter les choses, on peut réutiliser le handle du thread après l'avoir converti en une chaine.

En résumé :
A l'exécution du thread secondaire :
1- créer un composant session
2- affecter la propriété SessionName de ce composant Session avec un nom différent de celui de la session principale
2- créer une requête et affecter sa propriété SessionName


Une source d'info intéressante : threaded queries.
May Delphi be with you
0
Fandril Messages postés 6 Date d'inscription lundi 11 août 2003 Statut Membre Dernière intervention 11 décembre 2003
31 oct. 2003 à 10:55
J'ai essaye de creer une session par thread et ca change pas vraiment mon probleme meme si ca semble plus propre...

J'utilise pas de datasource car je ne fais pas d'affichage de mon resultat, je stocke les resultats dans un tableau pour l'utiliser par la suite...

L'execution de la requete tres lente (plusieurs secondes) pour une requete select... et j'en execute plusieurs a la suite, et ca devient intollerable...

Quels sont les methodes qui doivent etre utiliser avec synchronize??

Merci de votre aide...

(J'ai regarder la source, elle est tres interessante, mais il utilise une datasource, est ce qu il peut y avoir un rapport...)
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
1 nov. 2003 à 10:36
Je ne vois pas l'intérêt de stocker des résultats dans un tableau. Celà va à l'encontre de l'intérêt de l'utilisation de bases de données.
Les performances d'une requête Select s'en trouvent dégradées avec une utilisation forcenée d'une ou plusieurs clauses "like". Il faut peut-être chercher de ce côté là.

La méthode synchronize des threads ne doit être utilisée que lorsqu'il s'agit de mettre à jour des composants visuels dans les interfaces utilisateurs.
May Delphi be with you
0
Fandril Messages postés 6 Date d'inscription lundi 11 août 2003 Statut Membre Dernière intervention 11 décembre 2003
4 nov. 2003 à 12:25
Resolu,

En montant un peu la priorité du thread, tout ce pass bien, les resultats devait arriver mais ne devait pas etre pris en compte...

Je vois pas vraiment ce tu veux dire sur l'inutilité de mettre dans un tableau les resultats d'un select, pourquoi utiliser des like ou je ne sait quoi... J'ai peut etre pas compris un truc...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
4 nov. 2003 à 20:49
Si les données sont stockées dans une base de données, pourquoi en faire une copie dans un ou plusieurs tableaux ?

La clause "Like" du SQL : c'est sur qu'elle est très pratique mais les temps de réponse des requêtes s'en ressentent de manière sensible. A utiliser avec modération.

May Delphi be with you
0
Fandril Messages postés 6 Date d'inscription lundi 11 août 2003 Statut Membre Dernière intervention 11 décembre 2003
10 nov. 2003 à 13:14
Je stocke tres temporairement dans un tableau pour faire un affichage sous la forme d'un truc qui s'anime...

Mais en tout cas, j'utilise pas de like et je vois meme pas pourquoi j'en utiliserais...

Merci en tout cas
0
Rejoignez-nous