Ver Mensaje Individual
  #1  
Antiguo 08-04-2024
jmbarrio jmbarrio is offline
Miembro
 
Registrado: may 2003
Posts: 101
Reputación: 22
jmbarrio Va por buen camino
Error en Thread (hilo) Android

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;
        //label1.Text := contador.ToString + ' de ' + nClientes.ToString;
        //sleep(1);
        TThread.Synchronize(TThread.CurrentThread,
        procedure
        begin
        Progressbar1.Value := Progressbar1.Value +1
        end);
        //Application.ProcessMessages;


      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.
Responder Con Cita