• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

_viri_TT_

[VB6] Janela de Loading

10 mensagens neste tópico

Bom dia,

Venho aqui ao P@P pedir a ajuda dos especialistas em VB6  :)

O meu problema é o seguinte:

Tenho um form para gerir uma base de dados com perguntas, a BD é em MySQL e a tabela tem aprox. 5000 registos.

Quando eu faço um Select à tabela inteira, o MySQL envia cerca de 600Kb de dados....

Como o meu programa acede ao MySQL através da Internet, e estando o servidor em minha casa com uma ligação nada de especial, isto demora alguns segundos até transferir todos os dados através da internet (Aprox. 10 Segundos).

Ora a minha dúvida é a seguinte, como mostrar um form ou outra forma qualquer para ter uma barra daquelas de Search (que passa até ao final e volta para o início) de forma a mostrar ao utilizador que deve esperar alguns segundos e que o programa não está bloqueado?

Os melhores cumprimentos,

_viri_TT_

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estás a referir-te a uma progressbar!

E como fazes a transferência dos dados ? Podes mostrar código ou explicar ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estás a referir-te a uma progressbar!

E como fazes a transferência dos dados ? Podes mostrar código ou explicar ?

Sim género de progress bar, mas daquelas que não param, estão sempre a mexer :)

A transferência dos dados é feita automaticamente pelo Connector.

Utilizo o Driver ODBC 3.51.

Ligacao = "DRIVER={MySQL ODBC 3.51 Driver};" & "SERVER=" & ServerMySQL & ";" & "DATABASE=bdJogo;" & "USER=" & UserMySQL & ";PWD=" & PassMySQL & ";" & "OPTION=16427;" & "port=3307;"

Set Coneccao = New ADODB.Connection
Coneccao.ConnectionString = Ligacao
Coneccao.CursorLocation = adUseClient
Coneccao.Open

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, mas essa animação pode ser feita fácilmente o problema é que nesses processos que são feitos em bloco, os recursos da aplicação vão para esse mesmo processo, e todos os outros bloqueiam (ou seja não são visíveis).

Para se conseguir isso tens de recorrer a threads, para poder correr um processo numa thread e em outra a progressbar.

Podes ver este artigo sobre a criação de threads em VB6 (em .NET é muito mais simples)

A Thread to Visual Basic

http://www.desaware.com/tech/threading.aspx

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, mas essa animação pode ser feita fácilmente o problema é que nesses processos que são feitos em bloco, os recursos da aplicação vão para esse mesmo processo, e todos os outros bloqueiam (ou seja não são visíveis).

Para se conseguir isso tens de recorrer a threads, para poder correr um processo numa thread e em outra a progressbar.

Podes ver este artigo sobre a criação de threads em VB6 (em .NET é muito mais simples)

A Thread to Visual Basic

http://www.desaware.com/tech/threading.aspx

Estou a perceber...

Vou agora tentar aplicar isso no programa e quando tiver novidades aviso.

Obrigado.

Cumps,

_viri_TT_

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estive a ler a página que disses-te...

A solução do multithreading parece-me algo difícil embora fosse eficaz, e como isto é para um projecto que vou ter de apresentar não me parece que eu me safe na explicação dessa parte.

Assim de repente não te ocorre mais nenhuma solução para este problema?

Cumps.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma solução simples é abrir uma nova janela com uma label a dizer algo como "Em actualização ..." e iniciar o processo. Depois fechar quando o processo terminadar.

Sempre é melhor do que bloquear a aplicação sem dar informação ao utilizador.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma solução simples é abrir uma nova janela com uma label a dizer algo como "Em actualização ..." e iniciar o processo. Depois fechar quando o processo terminadar.

Sempre é melhor do que bloquear a aplicação sem dar informação ao utilizador.

Vou tentar criar um gif com uma barra de progresso e depois metê-lo sozinho num form.

Entretanto devo ir almoçar mas depois a tarde digo como ficou.

Obrigado, Cumps.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nada.

Criei Labels, gifs animados, progressbars, e nenhum fica visível enquanto o recordset é carregado...

Até que cheguei a uma conclusão,

Porquê dizer ao utilizador para esperar em vez de fazer mais rápido?

Isto porque me lembrei que o MySQL tem uma opção que é o Limit, ou seja, podemos limitar o número de registos retornados a um determinado número, como a tabela tinha cerca de 5000 registos, basta-me limitar a +/- 500 registos e o form carrega em menos de 1 segundo pois a quantidade de dados a trasmitir é muito menor! (10x menor) :)

Consegui fazer a aplicação ficar mais rápida apenas com a reconstrução do SQL :)

Cumprimentos, e obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nada.

Criei Labels, gifs animados, progressbars, e nenhum fica visível enquanto o recordset é carregado...

Eu sabia que não dava :D quando o processo está a correr, nada mais funciona.

Mais ainda bem que já conseguiste dar a volta ... vou marcar o tópico como resolvido!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora