Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   FireMonkey (https://www.clubdelphi.com/foros/forumdisplay.php?f=50)
-   -   Thread Firemonkey Android query (https://www.clubdelphi.com/foros/showthread.php?t=94884)

amadis 21-09-2020 16:47:59

Thread Firemonkey Android query
 
Que tal compañeros.

Estoy tratando de hacer funcionar un query Firedac (Sqlite). que toma datos de un clientdataset remoto.

Estoy tratando de aplicar este ejemplo de thread.

Código Delphi [-]
AniIndicator1.Enabled := True;
  Timer1.Enabled := True;
  Button1.Enabled := False;

  TThread.CreateAnonymousThread(procedure
    const
      Max = 20;
    begin
      for var i := 1 to Max do
      begin
        DoSomething(i);
        TThread.Synchronize(TThread.Current, procedure
          begin
            Progress := i * 100 div Max;
          end);
      end;
      TThread.Synchronize(TThread.Current, EndProgress);
    end).Start;


Pero cuando le pongo lo que necesito dentro NO FUNCIONA, NO SE EJECUTA

Este es el código que pretendo hacer funcionar

Código Delphi [-]
    
            QryRec := TFDQuery.Create(NIL);
                        QryRec.Connection := datos.FDconmovil;
                       QryRec.Transaction := datos.FDTrans;
                       QryRec.Connection.StartTransaction;
                      datos.CDSVende.IndexFieldNames := 'ID; COBRADOR';
                      datos.CDSVende.First;
                      max := datos.CDSVende.RecordCount;

                    TThread.CreateAnonymousThread(procedure

                      begin
                        for  i := 1 to Max do
                        begin

                          QryRec.Close;
                          QryRec.SQL.Clear;
                          QryRec.SQL.Append('INSERT INTO VENDEDOR');
                          QryRec.SQL.Append('(ID, VENDEDOR)');
                          QryRec.SQL.Append('values(:id, :v) ');
                          QryRec.ParamByName('id').AsInteger := datos.CDSVendeID.VALUE;
                          QryRec.ParamByName('v').AsString :=  datos.CDSVendeCOBRADOR.Value;
                          QryRec.ExecSQL;
                          datos.CDSVende.Next;


                          TThread.Synchronize(TThread.Current, procedure
                            begin
                              Progress := i * 100 div Max;
                              Label1.Text := inttostr(i); // esta linea es a fin de prueba para saber si corre y pues NO CORRE
                            end);
                        end;
                        TThread.Synchronize(TThread.Current, fin);
                      end).Start;


                      QryRec.Connection.Commit;
                      QryRec.free;

Si no pongo nada antes del primer TThread.Synchronize si corre.

¿que me estoy salteando u olvidando??

el-mono 23-09-2020 02:29:45

Amadis como va. Mira este post que a mi me funciono de esta manera:


http://delphiaccess.com/foros/index....ta-en-un-hilo/

amadis 23-09-2020 12:04:03

Muchas gracias, estudiaré el link que mencionas.

Aprovecho para comentar que había logrado ejecutar el hilo de la siguiente forma.

En realidad son 4 querys que ejecuto, uno tras otro aunque es indistinto.

Entonces hice un procedimiento por cada query y dentro del hilo los ejecuto a todos.

Código Delphi [-]
AniIndicator1.Enabled := True;
  Timer1.Enabled := True;
  Button1.Enabled := False;

  TThread.CreateAnonymousThread(procedure
      begin
        Q1;
        Q2;
        Q3;
        Q4;
        TThread.Synchronize(TThread.Current, procedure
          begin
            //mostraba progreso
          end);
      end;
      TThread.Synchronize(TThread.Current, EndProgress);
    end).Start;

De esa forma el tocar el boton que ejecuta ya se largaban los 4 querys en carrera, funciona, pero no se cuando terminan. Me iba dando cuenta porque como sincroniza una tabla contra el clientdataset remoto estaba viendo los cambios, pero era tal cual carrera. Todos corriendo a la par.


La franja horaria es GMT +2. Ahora son las 09:02:00.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi