Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   thread (https://www.clubdelphi.com/foros/showthread.php?t=69047)

calco_hugo 22-07-2010 20:10:29

thread
 
ante todo buenas tardes, como siempre un consulta
tengo un form (form1) con un button , este ejecuta una consulta SQL (delphi 7, sqlserver 7), como esta query tarda mas de 4 minutos, la hago en un thread (para que no se conjele la aplicacion), pero no se como mostrar el resultado en un form2, ya que he leido que un thread se lleva mal con las VCL y me esta dando error de ventana no identificada, si alguien me puede ayudar desde ya gracias
hugo

rgstuamigo 22-07-2010 21:23:41

Bueno...me imagino que tu consulta SQL debe ser bien compleja o traer demasiados datos para dure tanto tiempo(4 minutos:eek:), quizás te podríamos ayudar a optimizarla, aunque personalmente trabajo con MySQL pero alguna ves usé tambien MS SQL server :D.
Si se trata de traer demasiados datos pues supongo que puedes usar un componente ClientDataSet que es muy potente para esos menesteres tal como se explica aquí. ;)
Si la consulta no trae "demasiados" datos, pues creo que con un simple Dataset(Query, Table) puedes hacerlo;),y mostrar los resultado en un componente DBGrid ;).
De todas formas sería muy conveniente que dieras mas datos, en especial el por qué tu consulta tarda demasiado?:o :confused:.
Saludos...:)

calco_hugo 23-07-2010 00:11:03

disculpa la omision del dato, la base de datos se consulta por wan, es por eso que la consulta tarda demaciado, no son gran cantidad de datos los que devuelve el query, pero al ser por wan no siempre es rapido y tengo que pensar en el peor escenario.
lo que mas o menos quiero hacer (yo despues lo modificaria) es que el form1 invoque (con un button) al thread y cuando este finaliza me muestre los datos en un dbgrid (o cualquier otra forma) en un form2, pero como ya estoy probando y leyendo el thread no se lleva con las VCL
desde ya gracias
hugo

Neftali [Germán.Estévez] 23-07-2010 12:33:02

Cita:

Empezado por calco_hugo (Mensaje 371231)
ya que he leido que un thread se lleva mal con las VCL y me esta dando error de ventana no identificada, si alguien me puede

Bueno, eso de que los Threads se lleven mal con las VCL, no se... :confused::confused:

No se si te refieres a que, para realizar conexiones a Bases de Datos es recomendable (yo diría obligatorio) realizar nuevas conexiones en cada Thread, porque las librerías de conexión (al menos ADO) no son Thread-safe. Eso no quiere decir "que se lleven mal"; Si haces las cosas bien se "llevan perfectamente"... ;););)

Si quieres mostar los datos en un DBGrid, por ejemplo, lo que podrías probar es a realizar la consulta en el thread (que es lo qe más tarda) y luego una vez que tengas los datos, mostrar los datos en el DBGrid utilizando el procedimiento Syncrhonize para evitar problemas.

calco_hugo 23-07-2010 16:28:58

gracias neftali, vere por ese lado entonces
hugo

calco_hugo 23-07-2010 18:32:24

perdon la insistencia, pero sigo sin encontrar la solucion con el thread, la situacion es mas o menos asi, ejecuto el thread, cuando finaliza necesito que me habra un form y ahi mostrar los datos de las query, lo solucione, mostrando el form antes de mandar el thread, pero no creo que esta sea la solucion, al menos no me parece elegante, no se , soy un poco menos que novato
desde ya gracias
hugo

maeyanes 26-07-2010 20:12:50

Hola...

La clase Thread cuenta con un evento llamado OnTerminate, ese evento lo podrías usar para mandar llamar la ventana una vez finalice la ejecución del hilo...


Saludos...


La franja horaria es GMT +2. Ahora son las 08:12:13.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi