Buenas tardes, 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.
Código Delphi
[-]Thread := TThread.CreateAnonymousThread(
procedure
begin
while not FDMemTable1.Eof do
begin
try
with F_data.FDQryInsertCliente do
begin
Active := False;
Sql.Clear;
sqlstr:= 'Insert into clientes (CLI_COD, CLI_NOMCOM, CLI_DIRCOM, CLI_DIRPOB, CLI_ZONA) values(' + '''' + FDMemTable1.FieldByName('cli_cod').AsString + '''' +
',' + '''' + StringReplace(FDMemTable1.FieldByName('cli_rsocial').AsString, '''', '', [rfReplaceAll, rfIgnoreCase]) + '''' + ',' +
'''' + StringReplace(FDMemTable1.FieldByName('cli_direc').AsString, '''', '', [rfReplaceAll, rfIgnoreCase]) + '''' +
',' + '''' + StringReplace(FDMemTable1.FieldByName('cli_pobla').AsString, '''', '', [rfReplaceAll, rfIgnoreCase]) + '''' + ',' + '''' +
FDMemTable1.FieldByName('cli_zona').AsString + '''' + ')';
Sql.add(sqlstr);
ExecSQL;
end;
contador := contador + 1;
FDMemTable1.Next;
TThread.Synchronize(TThread.CurrentThread,
procedure
begin
Progressbar1.Value := Progressbar1.Value +1
end);
except
on e:exception do
showmessage(e.Message + ' ' + sqlstr)
end;
end;
end);
Thread.FreeOnTerminate := True;
Thread.Start;
showmessage('Sincronizacion de Clientes Completada. ' + contador.ToString + 'Clientes Traspasados');
el programa no recorre los registros de la tabla de memoria, me sale el mensaje Sincronizacion de clientes completada. 0 clientes traspasados.
Y seguidamente se va llenando la barra de progreso.
Podéis echarme una mano a ver que estoy habiendo mal.?
Muchas gracias, un saludo.