Ver Mensaje Individual
  #7  
Antiguo 09-04-2024
jmbarrio jmbarrio is offline
Miembro
 
Registrado: may 2003
Posts: 101
Reputación: 22
jmbarrio Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Como solución genérica, pasar las cosas a un Thread cuando el programa se ralentiza puede ser una buena opción, pero no siempre es la más adecuada, ya que los threads tienen sus particuladidades.
Tampoco vale, coger el código "antiguo", pasarlo a un thread y esperar que funcione (tal vez sí, pero no suele ser lo habitual).

Lo primero decir, que las operaciones con Bases de Datos en threads, en según qué casos requieren conexiones diferenes. Por ejemplo, en ADO no puedes usar la misma conexión en 2 threads, porque el componente de conexión no es "thread-safe";En el caso de Firedac hay que mirar bien las especificaciones, porque también tiene sus partocularidades (https://docwiki.embarcadero.com/RADS...ading_(FireDAC)).

En segundo lugar, veo que estás accediendo a componentes directamente desde el thread que están definidos "fuera" (F_data, FDMemTable1, contador); Almenos yo no los veo ahí. Ese acceso te va a dar problemas, puesto que lo estás haciendo sin sincronizar.

Este código no tiene sentido:
Código Delphi [-]
Thread.Start;
showmessage('Sincronizacion de Clientes Completada. ' + contador.ToString + 'Clientes Traspasados');

El ShowMessage va a salir nada más iniciar el proceso, no al final.
Hola Neftalí, tienes toda la razón, pensaba que el showmessage saldría al finalizar el hilo. ¿Cómo puedo enterarme de la finalización del hilo para yo poder sacar ese mensaje?
Gracias. un saludo
Responder Con Cita