CONSULTA LENTA TERMINAL BANCO MDB

MARCELO.TREZE 10/02/2014 16:51:28
#434502
Qual é a versão do service pack do seu vb?

tente usar o Microsoft ActiveX 6.1 object library, ao invés do 2.8


HUBER.FABIO 10/02/2014 16:59:26
#434503
Mistério né..rs

Estou na SP6 e troquei a referência para 6.1 e também não resolveu.

MARCELO.TREZE 10/02/2014 20:00:31
#434518
sinceramente não sei porque não funciona aqui funciona de boa.

HUBER.FABIO 11/02/2014 08:16:45
#434527
Olá,

Eu entendo, como disse, em um projeto aparece e no outro não, mais mesmo assim em alguns testes realizados ainda sinto uma certa lentidão, claro que são 50.000 registros e um [Ô]leg[Ô] até é aceitável, acontece que como no servidor a pesquisa é normal e a demora acontece somente nos terminais, meu cliente pediu para achar uma solução. E minha pesquisa é dinâmica na palavra toda [Ô]BA[Ô], BANANA, CABANA, etc. por ser dessa forma já se torna mais lenta por natureza por não conter índice.
Sendo assim:

Alguém teria uma alternativa, alguma sugestão como sei lá, se existe algo mais rápido, quebra galho, consulta tipo texto, deixar algo local na máquina, etc etc

aberto a sugestões

abraço a todos
MARCELODAVID 11/02/2014 08:46:20
#434533
Bom dia amigos!
Para pesquisas em grid eu particularmente não gosto de filtrar ao digitar, isso aumenta consideravelmente o trafego na rede.
Imagine a situação: Digito [Ô]a[Ô] a query busca em 50.000 linhas todos os registros que contenham tal critério. Digito [Ô]av[Ô], la vai
novamente mais uma árdua pesquisa no bd e em rede...

A lentidão é natural pela quantidade de registros (como já foi dito).

Antigamente eu usava esse tipo de pesquisa (pesquisar ao digitar). Mas com o crescimento do banco, ocorria a lentidão e é claro que no
servidor, por conter o banco local, a pesquisa era quase instantânea, mas em rede...

Mudei de tática: Ao carregar o form de pesquisa, eu copiava todos os registros para um banco local na estação. Assim a pesquisa era feita
nesse banco temporário local e os resultados foram ótimos!

Só que com o passar dos tempos, a copia de todos os registros para o banco local estava demorando muito...

Decidi mudar definitivamente a forma de pesquisa!

Agora a pesquisa é feita direto do banco do servidor, como era antes. Mas com uma diferença, não ao digitar e sim no click de um botão! Ocorre uma [Ô]lentidaozinha[Ô], mas é aceitável
uma vez que o usuário não está apenas digitando e esperando resultados instantâneos, ele se contenta em aguardar os resultado e já digita algo mais preciso. Resolvi meus problemas
GUIMORAES 11/02/2014 09:10:25
#434535
Você pode limitar as informações na consulta, por exemplo.

Select Top 300 produto, barras, preco
from tabela
where produto .....

Outro passo é trocar o Access por um banco de dados de verdade, pode ser sql server, mysql, firebird, oracle e por ai vai. Assim você terá um ganho de desempenho em sua aplicação, já que a quantidade de informação está crescendo.

As vezes a infraestrutura da rede pode influenciar no desempenho da aplicação, equipamentos antigos e rede mal estruturada faz com que os aplicativos tenham gargalo, sugiro que analise a situação da rede, trocando os switches para algum 100/1000 e o cabeamento para CAT6.



JLAUROSOUZA 11/02/2014 19:41:27
#434582
Tenta utilizar o comando [Ô]Doevents[Ô], isto vai deixa a consulta ser Bug e você poderá ver a lista sendo carregada, mais aconselho você utilizar no inicio o Grid com o Visible = false, e no final colocar o Grid com o Visible = true, pelo menos comigo isto funciona sem problemas, e eu carrega Milhares de colunas no meu Grid.

Espero ter ajudado!!!
FILMAN 11/02/2014 20:32:32
#434588
Mude a sua query de consulta ara essa e veja se vai conseguir

rs.Open [Ô]SELECT (CStr(Produtos.[Produto Longo]) & Space(8) & CStr(Produtos.[Nome Marca])) As Descricao, Produtos.[Código de Barras], Produtos.[Preço de Venda], Produtos.[Preço a Prazo], Produtos.[Estoque Atual], Produtos.[Código do Produto] from Produtos where Comercializado = False[Ô], cn
Set DataGrid.DataSource = PaginarRecordset(rs)

veja se vai resolver, caso não resolva não concatene as duas colunas use outro meio para fazer isso!

pode ser assim!

rs.Open [Ô]SELECT Produtos.[Produto Longo], Produtos.[Nome Marca], Produtos.[Código de Barras], Produtos.[Preço de Venda], Produtos.[Preço a Prazo], Produtos.[Estoque Atual], Produtos.[Código do Produto] from Produtos where Comercializado = False[Ô], cn
Set DataGrid.DataSource = PaginarRecordset(rs)

e nessa parte você concatena, pois o grid será preenchido pelo SubRecordSet e não pelo principal.

Nesse trecho do código:
Citação:

For x = 1 To PAGE_SIZE

If recset.EOF Then Exit For
.AddNew

For Each fld In recset.Fields
subRst(fld.Name) = fld.Value
Next fld

recset.MoveNext

Next x



Faça assim:

For x = 1 To PAGE_SIZE

If recset.EOF Then Exit For
.AddNew

For Each fld In recset.Fields
if fld.Name = [Ô]Produto Longo[Ô] Then
subRst(fld.Name) = fld.Value

recset.MoveNext

subRst(fld.Name) = subRst(fld.Name) & space(8) & fld.Value
else
subRst(fld.Name) = fld.Value
end if

Next fld

recset.MoveNext

Next x



Veja que onde esta em negrito foi onde eu alterei!

Eu estou utilizando o componente ADO ActiveX 2.8, mas somente 1 componente desse tipo esta selecionado verifique se você esta referenciando mais de 1.

Qualquer duvida poste ai
Página 2 de 2 [18 registro(s)]
Tópico encerrado , respostas não são mais permitidas