PDA

Ver la Versión Completa : Cancelar un proceso


pborges36
29-10-2007, 16:39:54
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:


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:


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!!