Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-12-2015
Gregorio Cíber Gregorio Cíber is offline
Miembro
 
Registrado: jun 2008
Posts: 98
Poder: 16
Gregorio Cíber Va por buen camino
Barra de progreso dentro de un TpFIBQuery

Hola amigos.
Hay alguna manera de poner una barra de progreso dentro de query que borra registros de una tabla. El query sería algo así:
Código Delphi [-]
    with qry_BorrarHastaFecha do
    begin
      Close;
      sql.Clear;
      sql.Add('DELETE FROM TABLA');
      sql.Add('WHERE (FECHA <= :HASTA_FECHA);');
      ParamByName('HASTA_FECHA').AsDate := edt_HastaFecha.Date;
      ExecQuery;
    end;

El texto SQL iría dentro del componente. Lo pongo así para que se pueda ver lo que hace.
La idea es que aparezca una barra de progreso mientras se están borrando los registros, si es que eso es posible.

Gracias de antemano y Felices Fiestas a todos.
Responder Con Cita
  #2  
Antiguo 23-12-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Pon el query a trabajar en un hilo en segundo plano y crea un cuadro de diálogo modal con un progress bar

Hay ejemplos de hilos (threads) en el foro, usa la función buscar
Responder Con Cita
  #3  
Antiguo 23-12-2015
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Dos cuestiones:
1. ¿Cuando sabe la barra de progreso cuando detenerse sin saber la cantidad de registros a borrar? O dicho de otro modo: como saber cuando debe estar al 50% de la tarea si ese SQL no indica cuantos registros son afectados?
2. ¿No te parece un pelin fuera de lugar y medio absurdo que un componente que no es visual (el query) disponga internamente de otro que si lo es? Un query es un query, y un progressbar es un progressbar.

Por 1 y 2, tienes un error de concepto, de diseño y de lógica.

En todo caso puedes 1ro lanzar una consulta SQL para saber la cantidad y que registros se van a eliminar. Y luego mediante un ciclo for u otro lanzar una instruccion SQL DELETE para ir borrando el registro i-ésimo. Naturalmente en cada iteración procedes a incrementar la posición del progressbar.

Obviamente, toda esta operatoria debería estar protegida por una transacción.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 24-12-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
En realidad es mejor poner una marquesia adelante de todo como para decir "estoy procesando"

Me acuerdo que diseñe una clase que reportaba progreso mediante eventos (de hecho, hablaba con vos de este tema en DA, el famoso THacerAlgo)

El gran problema es que para grandes procesos, el actualizar tanto, lo hace muy lento; yo pase de ponele 1 minuto procesando a 15, y si sacaba el refresco de la GUI el cuello de botella se iba

Lo que termine haciendo es refrescar cada x items (un delta, vamos) y no en cada uno, y anduvo mucho mejor

Pero sigo pensando que lo mas efectivo es, olvidarse de todo eso de decir: va el elemento x/150 - 30% completado y simplemente poner una marquesina y listo
Responder Con Cita
  #5  
Antiguo 24-12-2015
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Asi es Agustín como debiera hacerse, ir por lo simple. Un cartel de que estoy trabajando y listo. Al finalIzar lo ocultamos.
Recuerdo el hilo que comentas, y esas soluciones bien sos viables para casos que lo ameriten.

En esta ocasión di la respuesta más simple que puede darse. Para que se haga una idea y estudie realmente lo que pretende.
Convengamos que derrapa mucho mezclar un dataset con un progressbar, algo no cuadra... o no tiene en cuenta lo que en verdad significa la abstracción que implica cualquier dataset, o no se hace la idea de lo que hace a la separación de intereses de los componentes... va que digo... hasta del principio básico del paradigma OO.

saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 24-12-2015
Gregorio Cíber Gregorio Cíber is offline
Miembro
 
Registrado: jun 2008
Posts: 98
Poder: 16
Gregorio Cíber Va por buen camino
Gracias a todos por responder. Iré mirando lo que me habéis indicado.
Saludos.
Responder Con Cita
  #7  
Antiguo 24-12-2015
Gregorio Cíber Gregorio Cíber is offline
Miembro
 
Registrado: jun 2008
Posts: 98
Poder: 16
Gregorio Cíber Va por buen camino
Cita:
Empezado por Delphius Ver Mensaje
Dos cuestiones:
1. ¿Cuando sabe la barra de progreso cuando detenerse sin saber la cantidad de registros a borrar? O dicho de otro modo: como saber cuando debe estar al 50% de la tarea si ese SQL no indica cuantos registros son afectados?
2. ¿No te parece un pelin fuera de lugar y medio absurdo que un componente que no es visual (el query) disponga internamente de otro que si lo es? Un query es un query, y un progressbar es un progressbar.

Por 1 y 2, tienes un error de concepto, de diseño y de lógica.

En todo caso puedes 1ro lanzar una consulta SQL para saber la cantidad y que registros se van a eliminar. Y luego mediante un ciclo for u otro lanzar una instruccion SQL DELETE para ir borrando el registro i-ésimo. Naturalmente en cada iteración procedes a incrementar la posición del progressbar.

Obviamente, toda esta operatoria debería estar protegida por una transacción.

Saludos,
Todo lo que me indicas tienes razón. Lo que ocurre es que he puesto el mínimo código posible para que os hicierais una idea de lo que quería. El número de registros lo calculo antes. De todas formas gracias por tu comentario.
Responder Con Cita
  #8  
Antiguo 24-12-2015
Gregorio Cíber Gregorio Cíber is offline
Miembro
 
Registrado: jun 2008
Posts: 98
Poder: 16
Gregorio Cíber Va por buen camino
Cita:
Empezado por Delphius Ver Mensaje
Asi es Agustín como debiera hacerse, ir por lo simple. Un cartel de que estoy trabajando y listo. Al finalIzar lo ocultamos.
Recuerdo el hilo que comentas, y esas soluciones bien sos viables para casos que lo ameriten.

En esta ocasión di la respuesta más simple que puede darse. Para que se haga una idea y estudie realmente lo que pretende.
Convengamos que derrapa mucho mezclar un dataset con un progressbar, algo no cuadra... o no tiene en cuenta lo que en verdad significa la abstracción que implica cualquier dataset, o no se hace la idea de lo que hace a la separación de intereses de los componentes... va que digo... hasta del principio básico del paradigma OO.

saludos,
Todo esto está contemplado, sólo que qería saber si se podía hacer de forma sencilla. No obstante, me parece que pondré un 'cartelito', y listo.
Gracias por el comentario.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Barra de Progreso de Colores nlsgarcia Trucos 5 19-01-2014 14:46:48
Barra de progreso nabucodonosor Delphi para la web 3 01-11-2012 10:57:04
Barra de Progreso XcamX MySQL 1 21-12-2010 11:24:52
Barra de progreso? marlulipe Impresión 5 26-02-2008 16:51:55
Mostrar progreso de descarga de IndyFTP con barra de progreso devicer Internet 2 05-12-2005 14:59:32


La franja horaria es GMT +2. Ahora son las 19:33:54.


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