Enigma: mostrar Progresso de um select????

Delphi

02/10/2003

Ola colegas quem de voces ja viu, algo ou sabe como mostrar o progresso de um select?

ja procurei achei um topico no forum falando sobre callback do BDE mas isso nao ´e o que eu pretendo

tentei de uma forma bem simples ao menos demonstrar que o select estaria em progresso tipo:

btnConfirma.Enabled:= false;
btnVoltar.Enabled:=false;
Screen.Cursor:= crSQLWait;
Timer1.Enabled:=true;// onde o timer mostra/oculta um label
try
with QryTemp do
begin
..............
.............

Open;
end;
Screen.Cursor:= crDefault;
btnImprime.Enabled:=true;
btnVoltar1.Enabled:=true;
Timer1.Enabled:=false;
.............



MAS QUANDO EU DISPARO O SELECT ELE NAO ATIVA O TIMER

ALGUEM TEM UMA DICA, OU UMA SOLUÇÃO



GRATO PELA ATENÇÃO


Macario

Macario

Curtidas 0

Respostas

Rodrigo Coutinho

Rodrigo Coutinho

02/10/2003

Olá amigo utilize o comando Application.ProcessMessages que ele permite executar varios comandos em quanto nao termina um while por exemplo.

[]s, Rodrigo Coutinho


GOSTEI 0
Macario

Macario

02/10/2003

Voce poderia me dar um exemplo de como ´encaixar´

Application.progessmessages no código abaixo?

Outra coisa com isso eu poderia usar uma progressbar ou gauge?

ou pelo menos usar um timer para fazer um label ficar piscando enquanto o select nao termina?

procedure TfrmFAnaCli.btnConfirmaClick(Sender: TObject); begin btnConfirma.Enabled:= false; btnVoltar.Enabled:=false; Screen.Cursor:= crSQLWait; try with QryTemp do begin Close; DatabaseName := DM.TArqEmpr.DatabaseName; SQL.Clear; SQL.Add(´select´); SQL.Add(´C.v1 as Cod, C.v2 as Cliente, C.v4 as Municipio, C.v5 as UF,´); SQL.Add(´C.v12 as Contato, C.v13 as Telefone, R.v1 as codrep,´); SQL.Add(´R.v2 as Representante, C.Datacad,´); SQL.Add(´Max (N.Dnf) as Data,Max(N.nnf) as Nota, max (N.vlr) as Valor´); SQL.Add(´from arqclie C, arqprnf N, arqrepr R´); SQL.Add(´Where (C.v1 = N.ncl) and (N.nre = R.v1) and´ ); SQL.Add(´(c.v1 between :cli1 and :cli2) and´); SQL.Add(´(n.nre between :rep1 and :rep2)´); SQL.Add(´Group by C.v1, C.v2, C.v4, C.v5, C.v12,C.v13,R.v1, R.v2, C.datacad´); SQL.Add(´order by R.v1,C.v1´); Params[0].Value := mdtCliIni.Text; Params[1].Value := mdtCliFim.Text; Params[2].Value := mdtRepIni.Text; Params[3].Value := mdtRepFim.Text; Open; end; Screen.Cursor:= crDefault; Tempo.Caption:= IntToStr(QryTemp.RecordCount); btnImprime.Enabled:=true; btnVoltar1.Enabled:=true; except begin ShowMessage(´Erro de execução!´); btnConfirma.Enabled:= true; btnVoltar.Enabled:=true; Screen.Cursor:= crDefault; btnImprime.Enabled:=false; btnVoltar1.Enabled:=False; end; end; end;



GOSTEI 0
Afarias

Afarias

02/10/2003

bom, em SGBD (como IB) NÃO tem como mostrar o progresso de um select! -- não sei quanto a paradox ou dbase mas acho tb não dá.


T+


GOSTEI 0
Macario

Macario

02/10/2003

bom, em SGBD (como IB) NÃO tem como mostrar o progresso de um select! -- não sei quanto a paradox ou dbase mas acho tb não dá. T+


Colegas realmente esta dificl. a função que tem neste forum que utiliza functions do BDE é meia complicada pra mim poder acertar ela para funcionar corretamente

Outra coisa que exponho...é que nao consigo executar qualquer outro procedimento quando o select é iniciado ate ele terminar por que será que ocorre isso. tipo o timer citado acima


GOSTEI 0
Marlon Spiess

Marlon Spiess

02/10/2003

Oi, não entendi muito bem sua duvida, mas se vc vai jogar o resultado da query pra grid, não há como mostrar o progress, mas se for fazer um processo com o resultado, é só usa progressBar. Espero ter ajudado, qualquer duvida favor retornar.

Boa sorte


GOSTEI 0
Macario

Macario

02/10/2003

O resultado vai para um grid sim... mas o problema é!

1. o select é sobre [b:0597e7650c]dbf[/b:0597e7650c]

2. voces ja tem ideia da demora que deve ser...certo?

3. a minha necessidade em ter [b:0597e7650c]´algo´[/b:0597e7650c] que mostre progresso

é para que o usuario nao pense que o micro travou, pois dependendo do select ele demora até mais de 5 minutos

por isso a necessidade de algo imitando um progresso

como ja disse tentei usar um timer para fazer um label ficar piscando mas quando ativo o timer e em seguida entra o select o timer para de funcionar.

espero que juntos achemos uma solução por que seria de muito valor a todos...ao menos é o penso


GOSTEI 0
Marlon Spiess

Marlon Spiess

02/10/2003

Ok, vamos tentar resolver, me passa a query, para poder entender por completo a dimensão do seu problema e assim tentar resolve-lo em conjunto.


GOSTEI 0
Macario

Macario

02/10/2003

Marlon ja consegui um solução usando umas funções nesse topico

http://delphiforum.icft.com.br/forum/viewtopic.php?t=20796&start=0&postdays=0&postorder=asc&highlight=progress+progresso+progressbar

da uma olhada lá

valeu pela ajuda...


GOSTEI 0
POSTAR