FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
|||
|
|||
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 |
#2
|
||||
|
||||
Bueno...me imagino que tu consulta SQL debe ser bien compleja o traer demasiados datos para dure tanto tiempo(4 minutos), quizás te podríamos ayudar a optimizarla, aunque personalmente trabajo con MySQL pero alguna ves usé tambien MS SQL server .
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? . Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
|
#3
|
|||
|
|||
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 |
#4
|
||||
|
||||
Cita:
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.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#5
|
|||
|
|||
gracias neftali, vere por ese lado entonces
hugo |
#6
|
|||
|
|||
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 |
#7
|
|||
|
|||
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... |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
problema con thread | pulpin | C++ Builder | 28 | 19-05-2008 21:05:46 |
Thread | Paulao | Varios | 1 | 09-05-2008 01:42:34 |
Thread OnShow | walito | Varios | 4 | 17-10-2007 01:36:24 |
Thread bendito thread...se me pierde la ventana | Seba.F1 | API de Windows | 5 | 02-02-2006 01:16:30 |
Hilos o Thread | DarkByte | Varios | 7 | 20-11-2003 18:10:44 |
|