PDA

Ver la Versión Completa : Problemas al Salvar


!3d1@n
25-02-2005, 21:55:08
Holas por aca :
Ojala me puedan ayudar. Les explico:

Estoy haciendo una aplicación en Delphi 6, con mi Base de Datos en Access a la cual me conecto con ADO. El problema consiste a la hora de realizar la salva de la Base de Datos. Esta la comparto con el ARJ y la pico en pedazos de 1256Kb (para que me quepan en disquetes) y esos archivos que obtengo los guardo en una carpeta para despues irlos copiando respectivamente para los disquetes, utilizando la función CopyFileTo().

Tengo un TAnimate, 3 Label, 1 Gauge, 1 BitBtn


procedure TProSalResForm.FormActivate(Sender: TObject);
var
i, Len, GProg : integer;
begin
Cont := CuentaArchivos('C:\Ledian\Salva');
Len := Length(IntToStr(CuentaArchivos('C:\Ledian\Salva')));
GProg := 100 div CuentaArchivos('C:\Ledian\Salva');
if Len <> 0 then
begin
ShowMessage('Inserte disquete y luego presione ok');
Animate1.Active := True;
Label3.Caption := 'DISK.ARJ';
CopyFileTo('C:\Ledian\Salva\DISK.ARJ','A:\DISK.ARJ');
ProSalResForm.Gauge1.Progress := ProSalResForm.Gauge1.Progress + GProg;
Cont := Cont - 1;
Label2.Caption := 'Quedan ' + IntToStr(Cont) + ' disquete(s)';
Animate1.Active := false;
for i := 1 to CuentaArchivos('C:\Ledian\Salva') - 1 do
begin
if Len = 1 then
begin
ShowMessage('Inserte disquete y luego presione ok');
Animate1.Active := True;
Label3.Caption := 'DISK.A0' + IntToStr(i);
CopyFileTo('C:\Ledian\Salva\DISK.A0' + IntToStr(i),'A:\DISK.A' + IntToStr(i));
ProSalResForm.Gauge1.Progress := ProSalResForm.Gauge1.Progress + GProg;
Cont := Cont - 1;
Label2.Caption := 'Quedan ' + IntToStr(Cont) + ' disquete(s)';
Animate1.Active := false;
end
else
if i < 10 then
begin
ShowMessage('Inserte disquete y luego presione ok');
Animate1.Active := True;
Label3.Caption := 'DISK.A0' + IntToStr(i);
CopyFileTo('C:\Ledian\Salva\DISK.A0' + IntToStr(i),'A:\DISK.A0' + IntToStr(i));
ProSalResForm.Gauge1.Progress := ProSalResForm.Gauge1.Progress + GProg;
Cont := Cont - 1;
Label2.Caption := 'Quedan ' + IntToStr(Cont) + ' disquete(s)';
Animate1.Active := false;
end
else
begin
ShowMessage('Inserte disquete y luego presione ok');
Animate1.Active := True;
Label3.Caption := 'DISK.A' + IntToStr(i);
CopyFileTo('C:\Ledian\Salva\DISK.A' + IntToStr(i),'A:\DISK.A' + IntToStr(i));
ProSalResForm.Gauge1.Progress := ProSalResForm.Gauge1.Progress + GProg;
Cont := Cont - 1;
Label2.Caption := 'Quedan ' + IntToStr(Cont) + ' disquete(s)';
Animate1.Active := false;
end;
end;
Gauge1.Progress := 100;
Label3.Caption := 'Concluida la Restaura';
BitBtn1.Caption := 'Cerrar';
end;
end;

No se que es lo que pasa que cuando empieza a copiar se me pierde partes de la ventana y me aparecen pedazos en blanco, todo esto hasta que me sale nuevamente el mensaje de 'Inserte disquete y luego presione ok' que me vuelve la ventana o incluso solo sale el mensaje y adios ventana; pero lo mas curioso de todo esto es que le cambie el camino de destino para el disco duro C:\Ledian\SalDisk\ ... y esto no ocurre.

¿Alguién sabrá que es o que hago mal ?
Por favor no se si este adgoritmo sea el mas correcto para obtener lo que quiero, asi que acepto opiniones y criterios.

nota : Es 1ra vez que hago algo como esto.

De antemano gracias.
Un servidor.

roman
25-02-2005, 22:02:47
No se que es lo que pasa que cuando empieza a copiar se me pierde partes de la ventana y me aparecen pedazos en blanco, todo esto hasta que me sale nuevamente el mensaje de 'Inserte disquete y luego presione ok' que me vuelve la ventana o incluso solo sale el mensaje y adios ventana; pero lo mas curioso de todo esto es que le cambie el camino de destino para el disco duro C:\Ledian\SalDisk\ ... y esto no ocurre.


Es lógico que suceda esto. Copiar archivos es una operación costosa en cuanto a recursos de la máquina, sobre todo si copias a un disquette ya que la copia es más lenta. La aplicación tiene que enfocarse en la copia y no tiene tiempo de repintar la ventana ni procesar ningún mensaje (ni clicks, ni teclas, nada) de manera que todos se almacenan en la cola. Al terminar una copia es cuando se ocupa de la cola de mensajes y se repinta la ventana.

Te sugiero que investigues respecto al uso de hilos (threads) para que la copia se haga desde otro hilo permitiendo así que la aplicación continúe normalmente.

// Saludos

!3d1@n
28-02-2005, 15:09:30
Te sugiero que investigues respecto al uso de hilos (threads) para que la copia se haga desde otro hilo permitiendo así que la aplicación continúe normalmente.
Gracias Roman pero en donde puedo investigar acerca del uso de los hilos (therads) ... Me queda poco tiempo para entregar este programa ... por favor si alguien me pudiera ayudar se lo agredecería.