CONSULTA LENTA TERMINAL BANCO MDB
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
tente usar o Microsoft ActiveX 6.1 object library, ao invés do 2.8
Mistério né..rs
Estou na SP6 e troquei a referência para 6.1 e também não resolveu.
Estou na SP6 e troquei a referência para 6.1 e também não resolveu.
sinceramente não sei porque não funciona aqui funciona de boa.
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
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
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
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
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.
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.
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!!!
Espero ter ajudado!!!
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:
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
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
Tópico encerrado , respostas não são mais permitidas