Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cancelar un proceso (https://www.clubdelphi.com/foros/showthread.php?t=49752)

pborges36 29-10-2007 16:39:54

Cancelar un proceso
 
Hola a todos. Necesito una ayuda. Tengo un proceso en el cual tomo datos desde un xls para insertarlos a mi base de datos, usando OleObject. La pregunta es como se podria implementar un CANCELAR? Trate de hacerlo en el evento onkeypress del form, pero no pasa nada, como que durante el proceso el sistema no responde a nada. Creo que podria ser usando threads, pero la verdad soy novatisimo en ese tema. Desde ya muchas gracias.

Neftali [Germán.Estévez] 29-10-2007 17:07:25

Seguramente tienes un bucle que hace un recorrido para importar los datos; Dentro del bucle pon la línea:

Código Delphi [-]
  Application.ProcessMessages;

Para que el proceso no quede bloqueado y p`rueba con el mismo código que tienes (OnKeyPress).

De todas formas, ayudaría que pusieras el código que estás utilizando.

pborges36 29-10-2007 20:48:00

Muchas gracias Neftali, Es exactamente lo que necesitaba. El codigo quedo mas o menos asi:

Código Delphi [-]
var
  Form1: TForm1;
  cancelado:boolean;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
    if Key=#27 then //se cancela con la tecla escape
      cancelado:=True;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Int64;
  Excel: Variant;
  Archivo,op:string;
begin
    try
      Excel := CreateOleObject('Excel.Application');
    except
      Excel.Quit;
      showmessage('No se pudo crear el Objecto Excel.');
      raise;
    end;
    if OpenDialog1.Execute then
      Archivo:= OpenDialog1.FileName
    else
      exit;
 cancelado:=false;  
    lblarchivo.Caption:='Importando archivo: '+Archivo;
    Excel.Workbooks.Open(Archivo);
    i:=1;
    repeat
        c1:=Excel.Cells[i,1].Value;
  //INGRESO LOS REGISTROS A MI BASE DE DATOS
  inc(i);
  lblregistros.Caption:=IntToStr(i)+' Registros leidos';
  lblregistros.Repaint;
  op:=Excel.Cells[i,1].Value;
  Application.ProcessMessages;
 until (op=eof.Text) or (cancelado);
  try
  Excel.quit;
  Excel.Free;
  except
  end;
end;

solo me resta agregar que la propiedad Keypreview del form esta en true.
Muchas Gracias!!


La franja horaria es GMT +2. Ahora son las 23:06:14.

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