[Thread] Recherche dans une BDD
Salut à tous :D
Je voudrais mettre une recherche dans une BDD dans un thread et je voudrais savoir quelques trucs:
- J'utilise des composants (KaDao et VCL standard) qui sont sur la form qui lance la recherche. Je voudrais savoir:si je lance un thread qui utilise ces composants pour faire la recherche, est-ce que ça bloque quand même la form?
- Est-ce qu'avec les recherches dans la BDD (Find_First et Find_Next) je dois mettre des synchonize?
Merci d'avance :D
Re: [Thread] Recherche dans une BDD
Citation:
Envoyé par Pedro204
- J'utilise des composants (KaDao et VCL standard) qui sont sur la form qui lance la recherche.
Quels composants VCL, stp ? Tu comprendras bien qu'un TDBGrid n'est pas tout à fait la même chose qu'un TSocket ou un TEdit... ;-)
Citation:
Envoyé par Pedro204
Je voudrais savoir:si je lance un thread qui utilise ces composants pour faire la recherche, est-ce que ça bloque quand même la form?
Ca bloque la form à coup sûr si l'action sur un composant déclenche un gestionnaire d'évènement, ou si une action sur un contrôle de ta form peut entrer en conflit avec les actions d'un autre thread. Il faut bien sûr faire attention à ne commencer le traitement du thread qu'après être sorti du gestionnaire d'évènement qui a servi à le créer, mais ça, je suppose que c'est déjà fait (et puis tu peux faire un Synchronize avant la boucle principale du Execute, si besoin est).
Typiquement : si tu as deux threads, deux TEdit "ReadOnly" et AUCUN gestionnaire pour les TEdit, alors chaque thread peut taper dans "son" TEdit sans utiliser Synchronize.
Si par contre ils tapent dans le même contrôle (ex : un TCheckBoxList) OU qu'il existe un gestionnaire d'évènement, alors Synchronize est obligatoire.
Si tes composants ne sont sur la fiche que parcequ'il faut bien les poser quelque part (ex : des composants dont on n'utilise que rarement les évènements, comme les boîtes de dialogue), alors tu t'en fiches. Cependant, il vaudrait mieux les instancier "manuellement" dans ton thread si tu veux avoir la paix... :twisted:
Citation:
Envoyé par Pedro204
- Est-ce qu'avec les recherches dans la BDD (Find_First et Find_Next) je dois mettre des synchonize?
Je n'en sais rien pour la BDD elle-même, mais côté form :
- Tu ne stockes pas les données obtenues sur le TForm => tu peux y aller sans Synchronize et comme un bourrin.
- Tu stockes les données sur le TForm (ex: dans un TStringGrid, un TMemo, etc...) : même contrainte que l'exemple ci-dessus avec les TEdit.
=> Ton thread est le SEUL et UNIQUE thread à pouvoir accéder à ce composant, qui n'a AUCUN gestionnaire d'évènement associé : pas de synchro.
=> Dans tous les autres cas, la synchro est obligatoire.