Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-12-2008
pablopessoa pablopessoa is offline
Miembro
 
Registrado: may 2008
Ubicación: Argentina
Posts: 162
Poder: 16
pablopessoa Va por buen camino
Como programar un ProgressBar

Hola!
Bueno como se habran dado cuenta en mis otros post, jamas en mi vida programe una aplicacion que se conecte a un servidor por internet jajaja.
La cosa es que me gustaria mostrar una barra de progreso que muestre el estado del proceso de actualizacion de la base.
Por ahora empeze probando con algo simple, me conecto al server ftp, descargo a mi pc el archivo que tengo ahi y trato de mostrar en el progressBar el estado de la descarga ( mostrar cuanto falta en bytes para que termine de bajar el archivo). La cosa es que tampoco me sale, les pasteo mi codigo para que me digan, si pueden dedicarle un ratito de tiempo, que estoy haciendo mal.

Código Delphi [-]
procedure TForm16.FTPWork();
begin
  Barra.Update;
end;

procedure TForm16.BitBtn1Click(Sender: TObject);
var
  FTP: TIdFTP;
begin
  FTP := TIdFTP.Create( nil );
  FTP.OnWork := FTPWork(); // ya aca no se que parametro pasar
 // por que desconozco los tipos
 //(Sender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Integer)
 // es decir, no logro entender como se usan
  FTP.Username := usuario.Text;
  FTP.Password := pass.Text;
  FTP.Host := host.Text;
  FTP.Port:=21;
  try
    FTP.Connect;
  except
    ShowMessage( 'No se ha podido conectar con el servidor ' + FTP.Host );
  end;
  if FTP.Connected then
  begin
        //showmessage('estoy conectado');
        barra.Position:=0;
        Barra.Max := FTP.Size('BPWOK.MDB') div 1024;
        FTP.Get('BPWOK.MDB','c:\BPWOK.MDB',true);
        FTP.Disconnect;
        FTP.Free;
  end
  else
      showmessage('No estoy conectado');
end;

Aclaro que este codigo lo fui armando por cosas que busque en internet y en tutotiales, cosa que no logro entender del todo..
perdon por las molestias y por tantas preguntas...
Un saludo a todos y siempre gracias por ser amables como son
Saludos!
Responder Con Cita
  #2  
Antiguo 05-12-2008
Avatar de xEsk
[xEsk] xEsk is offline
Miembro Premium
 
Registrado: feb 2006
Posts: 454
Poder: 19
xEsk Va por buen camino
Código Delphi [-]
procedure TForm16.FTPWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer);
begin
  Barra.Position:=AWorkCount;
end;

procedure TForm16.BitBtn1Click(Sender: TObject);
var
  FTP: TIdFTP;
begin
  FTP := TIdFTP.Create( nil );
  // solo tienes que poner el nombre, ya que el componente usara 
  // este puntero para envierte la informacion
  FTP.OnWork := FTPWork;                                    
  FTP.Username := usuario.Text;
  FTP.Password := pass.Text;
  FTP.Host := host.Text;
  FTP.Port:=21;
  try
    FTP.Connect;
  except
    ShowMessage( 'No se ha podido conectar con el servidor ' + FTP.Host );
  end;
  if FTP.Connected then
  begin
        //showmessage('estoy conectado');
        barra.Position:=0;
        Barra.Max := FTP.Size('BPWOK.MDB') div 1024;
        FTP.Get('BPWOK.MDB','c:\BPWOK.MDB',true);
        FTP.Disconnect;
        FTP.Free;
  end
  else
      showmessage('No estoy conectado');
end;

Lo unico que te faltaba era programar el evento "OnWork" del componente FTP.

Cuando asignas eventos, solo tienes que pasarle el nombre de la funcion a llamar... ya que es el emisor el encargado de rellenar los parametros y mandartelo a ti.

Espero que se entienda un poquitin xD

Saludos

P.D.: No se si el codigo que has puesto funciona correctamente o no, pero la parte que te faltaba del progress bar deberia ser algo asi a lo que te he puesto yo.
Responder Con Cita
  #3  
Antiguo 05-12-2008
pablopessoa pablopessoa is offline
Miembro
 
Registrado: may 2008
Ubicación: Argentina
Posts: 162
Poder: 16
pablopessoa Va por buen camino
Gracias!! Anda perfecto!!
te pregunto esto por que capas vos puedas sacarme esta duda...
la cosa es asi : el motivo de hacer este sistema, es que varios clientes actualizen sus datos de una base general, pero a su veces, los datos de los clientes deben subirse a la base general y de esta manera todos tienen los datos de todos.
Supongamos que yo implemento este sistema de actualizacion (bajar la base del FTP, actualizar la base local, actualizar la base general con los datos de la local y por ultimo subir de nuevo la base general con los datos actualizados).
Que pasaria si dos clientes actualizan al mismo tiempo y los dos intentan subir sus datos al ftp a la ves?, como se podria controlar eso?
Muchas gracias por tu ayuda!
Responder Con Cita
  #4  
Antiguo 05-12-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Eso debería estar controlado a nivel del sistema gestor de bases de datos. Dicho de otra forma, no debes subir el archivo de base de datos, sino un script con los cambios a realizar en la base principal, me explico:

Ususario 1: modifca la base de datos y sube el script (puro sql):
Código SQL [-]
insert into clientes (nombre, id) values ('pepe', 33);
delete from clientes where idcliente = 64

Ahora llega el Usuario 2: que ejecuta:
Código SQL [-]
update clientes set apellido " gonzález" where idcliente = 64
error: el cliente 64 ha sido borrado previamente por otro usuario. La base de datos genera una excepción y ese usuario queda enterado del asunto.

Si te limitas a subir el archivo de bases de datos (el .fdb, .db o lo que sea), siempre será inconsistente, porque tendrá las modificaciones realizadas por el último usuario.

Lo que planteas creo es muy engorroso, lo ideal sería trabajar directamente por internet con la base principal, Firebird te puede servir perfectamente. Si no puedes hacerlo así, te recomiendo otro método:
- bajas a local la base principal
- cuando el usuario hace una modificación en la local, guardas esos cambios traducidos a sql en un archivo de texto (los scripts esos de que hablo)
- Cuando el usuario quiera actualizar la base principal, sólo tienes que enviar ese archivo de texto y ejecutarlo en la base principal. Controlando los posibles errores que pueda dar.

Saludos y espero te sirva de algo esta parrafada.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 05-12-2008 a las 23:32:47.
Responder Con Cita
  #5  
Antiguo 15-10-2010
Avatar de Cañones
Cañones Cañones is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Paz Entre Ríos
Posts: 354
Poder: 18
Cañones Va por buen camino
Cita:
Empezado por xEsk Ver Mensaje
Lo unico que te faltaba era programar el evento "OnWork" del componente FTP.

Cuando asignas eventos, solo tienes que pasarle el nombre de la funcion a llamar... ya que es el emisor el encargado de rellenar los parametros y mandartelo a ti.

Espero que se entienda un poquitin xD

Saludos

P.D.: No se si el codigo que has puesto funciona correctamente o no, pero la parte que te faltaba del progress bar deberia ser algo asi a lo que te he puesto yo.
Gracias. Voy a probarlo.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
progressbar como la de emule. JXJ Varios 8 14-08-2008 19:13:58
como usar el progressbar con un timer kurono Varios 1 09-04-2008 11:18:22
Programar es como el Sexo Pascalizado La Taberna 3 01-03-2007 21:56:00
¿Como programar para una red? maravert Conexión con bases de datos 2 05-09-2006 18:00:27
como programar en PDA Rabata Varios 3 23-08-2006 17:35:30


La franja horaria es GMT +2. Ahora son las 18:31:20.


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