Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-02-2005
Avatar de !3d1@n
!3d1@n !3d1@n is offline
Miembro
 
Registrado: ene 2005
Ubicación: Ciudad Habana - Cuba
Posts: 46
Poder: 0
!3d1@n Va por buen camino
Angry Problemas al Salvar

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

Código Delphi [-]
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.
__________________
Saludos ... JLedian.
Responder Con Cita
  #2  
Antiguo 25-02-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por !3d1@n
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
Responder Con Cita
  #3  
Antiguo 28-02-2005
Avatar de !3d1@n
!3d1@n !3d1@n is offline
Miembro
 
Registrado: ene 2005
Ubicación: Ciudad Habana - Cuba
Posts: 46
Poder: 0
!3d1@n Va por buen camino
Question !!! threads ?

Cita:
Empezado por roman
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.
__________________
Saludos ... JLedian.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 16:32: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
Copyright 1996-2007 Club Delphi