CONSULTA LENTA TERMINAL BANCO MDB
Olá amigos,
Estou com um cliente com Cadastro de Produtos com 50.000 registros banco access MDB.
Criei uma consulta de produtos para tela de venda, onde uso um dbgrid e função SQL.
Problema está nos terminais, no servidor tudo OK, existe uma demora significativa para pesquisa, Exemplo: digito [Ô]A[Ô] o sistema congela um pouco até me retornar todos produtos que contém A e assim sucessivamente.
Alguém teria alguma ideia de como otimizar essa consulta, algum outro grid, alguma outra rotina e até mesmo alguma ideia que possa estar fazendo no cadastro de produtos que possa deixar minha consulta mais dinâmica.
Grato
Estou com um cliente com Cadastro de Produtos com 50.000 registros banco access MDB.
Criei uma consulta de produtos para tela de venda, onde uso um dbgrid e função SQL.
Problema está nos terminais, no servidor tudo OK, existe uma demora significativa para pesquisa, Exemplo: digito [Ô]A[Ô] o sistema congela um pouco até me retornar todos produtos que contém A e assim sucessivamente.
Alguém teria alguma ideia de como otimizar essa consulta, algum outro grid, alguma outra rotina e até mesmo alguma ideia que possa estar fazendo no cadastro de produtos que possa deixar minha consulta mais dinâmica.
Grato
Huber em outros tópicos o mesmo problema foi detectado na maioria deles, estava relacionado com a conexão dos terminais.
Exemplo: se você abrir a conexão somente na hora de fazer a consulta, isso torna o procedimento lento, porém se ao abrir o form da consulta você ja abrir a conexão, e depois apenas fazer a consulta o processamento e muito mais rápido.
veja se é isto que esta acontecendo.
Exemplo: se você abrir a conexão somente na hora de fazer a consulta, isso torna o procedimento lento, porém se ao abrir o form da consulta você ja abrir a conexão, e depois apenas fazer a consulta o processamento e muito mais rápido.
veja se é isto que esta acontecendo.
Bom dia !
Estou abrindo a conexão pelo load.
Estou abrindo a conexão pelo load.
então colega seu problema está relacionado a quantidade de registro, minha sugestão é paginar estes registros.
veja este LINK
veja este LINK
Olá,
Com certeza sim é pela quantidade de registros pois são 50.000, estou usando dbgrid, como seria esse paginar registros, funciona no dbgrid, tem algum exemplo aqui no fórum.
Com certeza sim é pela quantidade de registros pois são 50.000, estou usando dbgrid, como seria esse paginar registros, funciona no dbgrid, tem algum exemplo aqui no fórum.
Se não tiver criado um Ãndice ainda no campo que faz a busca isso pode ajudar um pouco, mas o ideal em casos de muitos registros é não querer fazer tudo em tempo real, não faça a busca na hora que digitarem, deixe digitarem primeiro e só depois faça a busca
você viu o link que eu postei?
Olá Marcelo, pra mim só apareceu veja esse link e nada +
Achei algo sobre Paginar Registros, estou testando e acontece um erro, vou posta abaixo como estou usando.
Load
Set cn = New ADODB.Connection With cn
.CursorLocation = adUseClient
.Provider = [Ô]Microsoft.Jet.OleDB.4.0[Ô]
.Open [Ô]Data Source = [Ô] & vgDirDb & vgNomeDb
End With
Set rs = New ADODB.Recordset
Set rs.ActiveConnection = cn
rs.CursorLocation = adUseClient
rs.PageSize = PAGE_SIZE
rs.Properties([Ô]Initial Fetch Size[Ô]) = PAGE_SIZE
rs.Open [Ô]SELECT Produtos.[Produto Longo] & Space(8) & 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)
Private Function PaginarRecordset(recset As ADODB.Recordset) As ADODB.Recordset
Dim x As Long
Dim fld As Field
Dim origPage As Long
origPage = IIf(recset.AbsolutePage > 0, recset.AbsolutePage, 1)
With subRst
If .State = adStateOpen Then .Close
[ô]Cria campos
For Each fld In recset.Fields
.Fields.Append fld.Name, fld.Type, fld.DefinedSize, fld.Attributes
Next fld
[ô]Inclui registros
.Open
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
.MoveFirst
recset.AbsolutePage = origPage
End With
Set PaginarRecordset = subRst
End Function
Erro acontece na parte em negrito, no comando fld.DefinedSize , quando dou ponto ele não aparece essa opção
Achei algo sobre Paginar Registros, estou testando e acontece um erro, vou posta abaixo como estou usando.
Load
Set cn = New ADODB.Connection With cn
.CursorLocation = adUseClient
.Provider = [Ô]Microsoft.Jet.OleDB.4.0[Ô]
.Open [Ô]Data Source = [Ô] & vgDirDb & vgNomeDb
End With
Set rs = New ADODB.Recordset
Set rs.ActiveConnection = cn
rs.CursorLocation = adUseClient
rs.PageSize = PAGE_SIZE
rs.Properties([Ô]Initial Fetch Size[Ô]) = PAGE_SIZE
rs.Open [Ô]SELECT Produtos.[Produto Longo] & Space(8) & 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)
Private Function PaginarRecordset(recset As ADODB.Recordset) As ADODB.Recordset
Dim x As Long
Dim fld As Field
Dim origPage As Long
origPage = IIf(recset.AbsolutePage > 0, recset.AbsolutePage, 1)
With subRst
If .State = adStateOpen Then .Close
[ô]Cria campos
For Each fld In recset.Fields
.Fields.Append fld.Name, fld.Type, fld.DefinedSize, fld.Attributes
Next fld
[ô]Inclui registros
.Open
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
.MoveFirst
recset.AbsolutePage = origPage
End With
Set PaginarRecordset = subRst
End Function
Erro acontece na parte em negrito, no comando fld.DefinedSize , quando dou ponto ele não aparece essa opção
clica em cima da 'palavra LINK colega
Olá Marcelo
Esse exemplo que postei é do link passado, porém está apresentando erro acima citado, não reconhece o comando fld.DefinedSize
Esse exemplo que postei é do link passado, porém está apresentando erro acima citado, não reconhece o comando fld.DefinedSize
Olá,
Alguém saberia me dizer porque o VB não reconhece o comando em negrito na linha abaixo
.Fields.Append fld.Name, fld.Type, fld.DefinedSize, fld.Attributes
Engraçado é que num projeto reconhece e no outro não.
grato
Alguém saberia me dizer porque o VB não reconhece o comando em negrito na linha abaixo
.Fields.Append fld.Name, fld.Type, fld.DefinedSize, fld.Attributes
Engraçado é que num projeto reconhece e no outro não.
grato
Tópico encerrado , respostas não são mais permitidas