Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-08-2012
nickolas nickolas is offline
Miembro
NULL
 
Registrado: may 2011
Posts: 32
Poder: 0
nickolas Va por buen camino
Mostrar Progreso de operaciones

Buenas a todos.

Estoy trabajando con delphi 2009,mysql 5.1 y los componentes zeos para conectarme a la base de datos, el tema es el siguiente cuando mi aplicacion arranca se conecta a mysql con los datos que paso de un archivo ini, mi duda es como podria yo mostrar el progreso que va teniendo, ya que cuando la conecto a un base de datos que esta en otra maquina, tarda mas que cuando esta en mi maquina.

Gracias por leer, espero sus respuestas.

Última edición por nickolas fecha: 21-08-2012 a las 17:56:51.
Responder Con Cita
  #2  
Antiguo 21-08-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.027
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
La conexión debería ser casi instantánea.
Lo que quieres hacer es, creo, muy complicado, ya que en todo caso será problema de conexión, red, router, etc.
Yo revisaría todo porque no es normal que tarde en conectar a otro ordenador, cuando eso es "lo más normal del mundo"
Responder Con Cita
  #3  
Antiguo 21-08-2012
nickolas nickolas is offline
Miembro
NULL
 
Registrado: may 2011
Posts: 32
Poder: 0
nickolas Va por buen camino
a mi tambien me parece que no deberia tardar tanto pero unos segundos se toma, y por lo que veo todo esta correctamente configurado, anda bien solo que tarda. tengo que ver una forma de evitar que el usuario no pueda hacer nada hasta que yo no confirme que esta correctamente conectado ya que si no me tiraria un error. gracias por las respuesta.
Responder Con Cita
  #4  
Antiguo 21-08-2012
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
Algo a considerar es que acceder a otra máquina, sí o sí va a ser más lento que acceder a tu propia máquina. Si tienes tablas o consultas que se abren en automático al inicio del programa, quizá en local no lo notes pero sí en un acceso remoto. Podrías asegurarte que ninguna tabla se abre automáticamente.

// Saludos
Responder Con Cita
  #5  
Antiguo 21-08-2012
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Cita:
Empezado por nickolas Ver Mensaje
Buenas a todos.

Estoy trabajando con delphi 2009,mysql 5.1 y los componentes zeos para conectarme a la base de datos, el tema es el siguiente cuando mi aplicacion arranca se conecta a mysql con los datos que paso de un archivo ini, mi duda es como podria yo mostrar el progreso que va teniendo, ya que cuando la conecto a un base de datos que esta en otra maquina, tarda mas que cuando esta en mi maquina.

Gracias por leer, espero sus respuestas.
Hola Nickolas!

Quiero empezar aclarando un punto. No puedes medir algo que es impreciso. Lo que buscas es como tratar de determinar el movimiento de las partículas cuánticas.

A cómo ya los compañeros te han comentado, el tiempo de conexión depende de muchos factores. En lugar de tratar de implementar un ProgressBar para esto, mejor utiliza una variante del ProgressBar que fue inventada precisamente para este tipo de procesos. La variante se le conoce como Infinite Progress Bar. Creo que los componentes Jedi traen incluídos una barra con estas prestaciones. Otra alternativa es utilizar un GIF animado. Nuevamente, los componente Jedi incluyen un control visual para que tus formularios muestren este tipo de animaciones.

Sino tienes los componentes Jedi, puedes utilizar este código que acabo de escribir para tí:
Código Delphi [-]
var
    CS: Cardinal;
begin
    CS := GetWindowLong(Self.ProgressBar1.Handle, GWL_STYLE);
    CS := CS or PBS_MARQUEE;
    SetWindowLong(Self.ProgressBar1.Handle, GWL_STYLE, CS);
    SendMessage(Self.ProgressBar1.Handle, PBM_SETMARQUEE, Integer(True), 0);
end;

El código anterior lo puedes ejecutar al iniciar el formulario que contiene la barra. Necesitarás agregar la unidad CommCtrl a Uses. Es un código nativo, basado completamente en la API de WInd32, a cómo me gusta hacer la cosas

¿Cuál solución elegir? Depende del Look and Feel de tu aplicación. Si quieres apegarte al diseño global de Windows, un Infinite Progress Bar es una buena solución. Si quieres darle un toque de personalidad a tu aplicación, un GIF animado y sútil es una buena idea.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #6  
Antiguo 21-08-2012
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 Chris Ver Mensaje
El código anterior lo puedes ejecutar al iniciar el formulario que contiene la barra. Necesitarás agregar la unidad CommCtrl a Uses. Es un código nativo, basado completamente en la API de WInd32, a cómo me gusta hacer la cosas
En delphi7 hay que declarar esas constantes:

Código Delphi [-]
const
  PBS_MARQUEE = $08;
  PBM_SETMARQUEE = WM_USER+10;

Además, creo que sólo sirve si tienes un xpmanifest.

// Saludos
Responder Con Cita
  #7  
Antiguo 21-08-2012
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Cita:
Empezado por roman Ver Mensaje
En delphi7 hay que declarar esas constantes:

Código Delphi [-]
const
  PBS_MARQUEE = $08;
  PBM_SETMARQUEE = WM_USER+10;

Además, creo que sólo sirve si tienes un xpmanifest.

// Saludos
Gracias por la observación. Sí, el código no funcionará si la aplicación no tiene los temas activos.

Saludos!
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #8  
Antiguo 22-08-2012
nickolas nickolas is offline
Miembro
NULL
 
Registrado: may 2011
Posts: 32
Poder: 0
nickolas Va por buen camino
Gracias por tomarte las molestia de ayudarme pero solo tengo una duda, que es que yo tengo u procedimiento que se encarga de conectar, y no como hacer para integrar ese codigo con el procedimiento.
Este es el codigo del proceso de coexion si me podes arientar te agradeceria.

Código Delphi [-]
begin
  with DM_Conecciones do
      begin
         {En la linea Siguiente Creo o busco la ubicacion del archivo con las opciones}
        with TIniFile.Create(ExtractFilePath(Application.ExeName) + '\Configuracion.ini') do
          begin
            try
              begin
                Coneccion.Catalog := ReadString('Datos_Servidor','BasedeDatos:', Coneccion.Database);
                Coneccion.Database := ReadString('Datos_Servidor','BasedeDatos:', Coneccion.Database);
                Coneccion.HostName := ReadString('Datos_Servidor','Servidor:',Coneccion.HostName);
                Coneccion.Port := ReadInteger('Datos_Servidor','Puerto:',Coneccion.Port);
                Coneccion.User := ReadString('Datos_Servidor','Usuario:', Coneccion.User);
                Coneccion.Password := ReadString('Datos_Servidor','Contraseña:',Coneccion.Password);
              end;
            finally
                Free; {Libero un archivo}
            end;
          end;
      try
       begin
         Coneccion.Connected := TRUE;
       end;
      except
       begin
          Application.MessageBox('No ha sido posible conectar con el servidor', 'Conectar Servidor',MB_ICONEXCLAMATION);
       end;
      end;

      end;

Espero tu respuesta Chris gracias.

Última edición por Casimiro Notevi fecha: 22-08-2012 a las 00:38:46.
Responder Con Cita
  #9  
Antiguo 22-08-2012
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
Podrías activarla barra en el evento BeforeConnect del TZConnection y desactivarla en el evento AfterConnect.

// Saludos
Responder Con Cita
  #10  
Antiguo 22-08-2012
nickolas nickolas is offline
Miembro
NULL
 
Registrado: may 2011
Posts: 32
Poder: 0
nickolas Va por buen camino
listo gracias cuando lo pruebe les comento.
Responder Con Cita
  #11  
Antiguo 23-08-2012
nickolas nickolas is offline
Miembro
NULL
 
Registrado: may 2011
Posts: 32
Poder: 0
nickolas Va por buen camino
probe lo que me dijiste de poner que se active en el BeforeConnect y el afterconnect del zconection el problema con eso es que no muestra nada de lo que este en el formulario principal hasta que este conectado o me tire error que no se pudo conectar, tambien probe que muestre un mensaje mientras esta conectando el problema que si da un error la conexion no me muestra el error hasta que cierro el formulario que habia abierto antes, alguien sabe si el zconection tiene algun evento que detecte si la conexion se hiso corecctamente asi como tiene los otros (afterconect beforeconnect
Responder Con Cita
  #12  
Antiguo 23-08-2012
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
Intenta esto:

Código Delphi [-]
const
  CM_AFTERSHOW = WM_USER + 100;

type
  TForm1 = class (TForm)
    ...
    procedure FormCreate(Sender: TObject);
  private
    procedure CMAfterShow(var Message: TMessage); message CM_AFTERSHOW;
  end;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  SetWindowLong(
    ProgressBar1.Handle, GWL_STYLE,
    GetWindowLong(ProgressBar1.Handle, GWL_STYLE) or PBS_MARQUEE);

  PostMessage(Handle, CM_AFTERSHOW, 0, 0);
end;

procedure TForm1.CMAfterShow(var Message: TMessage);
begin
  SendMessage(ProgressBar1.Handle, PBM_SETMARQUEE, 1, 0);

  try
    ZConnection1.Connect;
  finally
    SendMessage(ProgressBar1.Handle, PBM_SETMARQUEE, 0, 0);
  end;
end;

// Saludos
Responder Con Cita
  #13  
Antiguo 24-08-2012
nickolas nickolas is offline
Miembro
NULL
 
Registrado: may 2011
Posts: 32
Poder: 0
nickolas Va por buen camino
gracias por las respuestas pero todavia no encuentro solucion, si llego a encontrar una forma de hacerlo lo paso o lo escribo.
Responder Con Cita
  #14  
Antiguo 24-08-2012
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
Ok. Te esperamos.

// Saludos
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
¿como mostrar ventana de progreso? JXJ Varios 5 17-03-2011 22:01:28
Problemas al mostrar el progreso con TGauge Ledian_Fdez OOP 5 27-10-2006 19:06:22
Mostrar progreso de descarga de IndyFTP con barra de progreso devicer Internet 2 05-12-2005 14:59:32
Como hago para mostrar una barra de Progreso jimmyx017 Varios 7 16-06-2005 16:06:05
Enviar un Stream y mostrar el progreso johncook Internet 0 22-10-2004 17:05:43


La franja horaria es GMT +2. Ahora son las 22:57:50.


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