Cita:
Empezado por jmbarrio
...tengo un trozo de código que recorre los registros de una tabla de memoria y para cada uno de ello hace un insert en una base de datos. Al ejecutarlo en android lo ejecuta bien pero tarda alrededor de 10 segundos y me sala un mensaje en pantalla de que la aplicación no respònde y me pide esperar o aceptar.
Mirando en el foro, vi que lo mejor era hacer un hilo. El código del hilo lo creo en un bottonclick.
Podéis echarme una mano a ver que estoy habiendo mal.?
|
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.