Página 1 de 1

DBEdit lento p/focar 1º registro (não é probl. de pesquisa)

Enviado: 02 Abr 2008 08:09
por paulobergo
Bom dia amigos!

Estou experimentando uma lentidão muito grande quando abro um DBEdit em uma tabela com muitos registros.

A versão que uso é: "xHarbour Compiler build 0.99.70 (SimpLex)"

O que acontece, exatamente, é que o DBEdit preenche normalmente a janela com os registros disponíveis até o limite da janela, sem problemas, mas demora muito a "focar" o registro do topo...

Uma tabela simples, de clientes, indexada pelo nome, sem qualquer tipo de filtro, leva esse tempo, para ter o foco no registro do topo:

pentiumIV 1.6, xp, 256mb, acessando localmente: menos de um segundo
duron 1.8, w98, 128mb, acessando pela rede: menos de um segundo
duron 1.1, w98, 128mb, acessando pela rede: quatro segundos
pentiumIII 533, xp, 256mb, acessando pela rede: 6 segundos
k6 II 500, w98, 128mb, acessando pela rede: 12 segundos
pentiumIV, 1.8, xp, 512mb, acessando pela rede: quatro segundos

O que parece é que, para "formar" a janela, o DBEdit faz algo como um GoBottom para depois se posicionar no registro do topo da janela...

Então... há alguma solução para isso (atualizar a versão do XHarbour poderia resolver)?

Grato por qualquer ajuda!

Enviado: 02 Abr 2008 08:27
por ERASMO ANDRIOLI
COLEGA...

Esqueça tudo o que voce tem e comece a utilizar as rotinas descritas no link abaixo:

https://pctoledo.org/forum/viewto ... ght=dbedit

Saudações,

ERASMO

Grato pela atenção mas não é um problema de pesquisa...

Enviado: 02 Abr 2008 09:29
por paulobergo
Erasmo, grato pela dica... mas já implementei este código antes para, apenas, usar a opção de pesquisa durante o DBEdit...

O problema é de focar o primeiro registro rapidamente... só isso...

Considere que, para minimizar a perta de tempo, estou tendo que fazer isso:

Abro a tabela/encontro um nome qualquer/gravo o registro/vou para o final da tabela/volto para o primerio registro/executo o DBEdit:

sNome := 'PAULO'

Use clientes Index clinome
Set SoftSeek On
Seek &sNome
iMarca := RecNo()
Go Bottom
Go iMarca
DbEdit(5, 0, ... ... ...)

Isso é que, dependendo da máquina, provoca um atraso em focar o primeiro registro...

Hoje, a título de teste, vou eliminar todos os protocolos ipx/netbeui dos computadores que ainda os possuem, para ver se o atraso é causado pela rede... se melhorar, posto aqui...

Abraços...

Grato pela atenção!

Enviado: 02 Abr 2008 11:25
por Luciano Bonfim
por que vc usa essa macro?

Seek &sNome

basta

Seek sNome

e tambem falta oset softseek off

Set SoftSeek On
Seek sNome
Set SoftSeek Off

Enviado: 02 Abr 2008 12:12
por paulobergo
Oi Luciano...
Isso foi só um exemplo... pensei "find &sNome" e escrevi seek... mas realmente é seek sNome...
O Set SoftSeek Off também é colocado após o "seek"... mas sua existência ou não também não afeta a "lerdeza" em focar o primeiro registro...
De qualquer forma, grato pela colaboração...

Enviado: 02 Abr 2008 12:38
por gvc

Código: Selecionar todos

sNome := 'PAULO'

Use clientes Index clinome // Vc abre o arquivo toda vez?
dbseek(alltrim(Nome), .T.)
dbedit(5, 0, ... ... ...)
Tente verificar como esta o DBF:

Código: Selecionar todos

sNome := 'PAULO'

Use clientes Index clinome // Vc abre o arquivo toda vez?
dbseek(alltrim(Nome), .T.)
while !eof()
   ? nome
   dbskip()
end
Eu estou usando o dbedit.prg no xHarbour e não estou tendo problemas.
A demora de posicionamento normalmente e um filtro aberto.
Vc pode abrir o DBF sem o indice e abrir diretamente o dbedit, sem pesquisar o nome. Veja quanto tempo demora da abertura do dbf até o dbedit estabilizar.

Boa sorte. Espero ter ajudado.

Enviado: 02 Abr 2008 13:15
por janio
PauloBergo,

A vs. 99.70 do xharbour veio com alguns problemas no DBEDIT.

O que vc pode fazer é pegar o DBEDIT.PRG da vs 99.60 e compilá-lo junto com sua aplicação, ae seus problemas acabaram-se! rsrsrsrsrs


Jânio

Enviado: 02 Abr 2008 15:59
por ERASMO ANDRIOLI
Seria possível postar a rotina dessa busca, de forma mais detalhada, para os companheiros darem uma olhada? (use modo Code).

Fui...

Enviado: 02 Abr 2008 18:24
por Luciano Bonfim
o que seriam "muito registros" para vc...

eu tenho sistema rodando com a 0.99.6 e com a 1.0.0 e o dbedit funciona perfeitamente....

Enviado: 03 Abr 2008 08:29
por paulobergo
Olá! Bom dia!

O problema acontece com tabelas com 18mil, 64mil, 350mil...... registros...

Acredito que seja um problema quanto à forma de desenho da tela feito pelo DBEdit.

Veja só: uso duas aplicações que tem, basicamente, o mesmo código...
FatNtx é o programa de faturamento compilado no Clipper 5.3c
FatNtx32 é o mesmo programa, compilado no XHarbour 0.99.7...
O FatNtx, 16bits, usado nas máquinas com Windows95 e Windows311, em uma mesma pesquisa simples, em uma tabela também simples (tipo cadastro de clientes ordenado pelo campo nome, como exemplifiquei antes), ao abrir o DBEdit, foca instantaneamente no primeiro registro encontrado...
O FatNtx32, 32bits, usado nas máquinas com Windows98, 2000 e XP demora para focar o primeiro registro, em função do computador... em um PentiumIV com 256mb e XP, leva dois segundos... em um PentiumIII com 128mb e Win98, leva seis... e assim por diante...

Experimentei usar o DBEdit.prg da 1.00.00 e o problema continua... não encontrei ainda o fonte do dbedit.prg da 0.99.6...

Quanto ao código fonte da DBEdit.prg, dei uma olhada superficial; creio que o DBEdit não esteja respeitando o limite de linhas que cabem dentro da janela definida e continua "lendo" a tabela até o seu final... algo assim: se definirmos uma janela para o DBEdit em que cabem 10 linhas (10 registros), o DBEdit as preenche e não detecta que já estão todas preenchidas e continua lendo registro a registro até o final da tabela...

Isso não é percebido em máquinas rápidas, tabelas acessadas por um único usuário ou acessadas localmente, e com tabelas pequenas...

Nas máquinas que uso para desenvolvimento (Pentium IV 1.6 512mb e Celeron 1.6~ 1gb), quando abro a tabela de clientes, com 64mil registros, o DBEdit foca a primeira linha quase que instantaneamente, mas dá para perceber um "delay")... se abro a tabela de crediário, com un 450mil registros (mesmo sem pesquisa nenhuma, seek, find, locate...), já leva uns 3 segundos... e se faço o mesmo com a aplicação 16 bits, o foco é instantaneo...

De qualquer forma, grato pela colaboração... neste fim de semana vou dar uma vasculhada no código da DBEdit e retorno...

Grato! Abraços!

Enviado: 03 Abr 2008 13:36
por Luciano Bonfim
compila seu sistema 32 bits usando a GTWVW

Enviado: 03 Abr 2008 18:16
por janio
PauloBergo,

Tente como o Luciano Bonfim sugeriu. Compile sua aplicacao com a lib GTWVT ou GTWVW, pois essa lentidao que vc ta passando é devido ao console do win98 que é péssimo.

Com a GTWVW ou GTWVT sua aplicacao rodará dentro de uma janela, mas continuará sendo texto.

Janio

Enviado: 04 Abr 2008 09:24
por gvc
PauloBergo,

Postei MP com o dbedit.prg que eu uso. Não apresentou problemas aqui.

Enviado: 09 Abr 2008 10:53
por vagucs
Amigo Paulobergo

Tem um erro no seu codigo,:

Código: Selecionar todos

sNome := 'PAULO'
Use clientes Index clinome
Set SoftSeek On
Seek &sNome
iMarca := RecNo()
Go Bottom
Go iMarca 
DbEdit(5, 0, ... ... ...) 
Assim fica melhor

Código: Selecionar todos

sNome := 'PAULO'
Use clientes Index clinome
Set SoftSeek On
dbSeek(sNome)
DbEdit(5, 0, ... ... ...) 
Deve melhor um pouco a velocidade. use a versão mais nova do xharbour, teve melhorias no browse relativo a velocidade, o que afeta o DBedit tambem, que é feito com uso dele.

Enviado: 09 Abr 2008 15:46
por paulobergo
Olá pessoal...

Grato pelas dicas!

No próximo fim de semana tentarei fazer algumas mudanças com as dicas que vocês passaram...
A lentidão para focar o primeiro registro só ocorre realmente no DBEdit... de resto, em tudo os sistemas funcionam perfeitamente...
Dando certo eu posto aqui (ainda não desisti também de vasculhar o código da dbedit.prg, inclusive da versão 1.00 que baixei por último e que também não melhorou em nada a questão de focar o 1o. registro)...

Grato e um grande abraço!