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

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

paulobergo
Usuário Nível 1
Usuário Nível 1
Mensagens: 30
Registrado em: 09 Nov 2007 08:54
Localização: Juiz de Fora-MG

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

Mensagem 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!
Editado pela última vez por paulobergo em 02 Abr 2008 08:56, em um total de 1 vez.
Não se vê bem com insolação... é essencial cobrir os olhos...
Avatar do usuário
ERASMO ANDRIOLI
Usuário Nível 2
Usuário Nível 2
Mensagens: 51
Registrado em: 15 Jul 2004 16:15
Localização: Sorriso-MT
Contato:

Mensagem 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
paulobergo
Usuário Nível 1
Usuário Nível 1
Mensagens: 30
Registrado em: 09 Nov 2007 08:54
Localização: Juiz de Fora-MG

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

Mensagem 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!
Não se vê bem com insolação... é essencial cobrir os olhos...
Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

Mensagem 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
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
paulobergo
Usuário Nível 1
Usuário Nível 1
Mensagens: 30
Registrado em: 09 Nov 2007 08:54
Localização: Juiz de Fora-MG

Mensagem 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...
Não se vê bem com insolação... é essencial cobrir os olhos...
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem 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.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem 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
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
ERASMO ANDRIOLI
Usuário Nível 2
Usuário Nível 2
Mensagens: 51
Registrado em: 15 Jul 2004 16:15
Localização: Sorriso-MT
Contato:

Mensagem 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...
Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

Mensagem 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....
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
paulobergo
Usuário Nível 1
Usuário Nível 1
Mensagens: 30
Registrado em: 09 Nov 2007 08:54
Localização: Juiz de Fora-MG

Mensagem 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!
Não se vê bem com insolação... é essencial cobrir os olhos...
Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

Mensagem por Luciano Bonfim »

compila seu sistema 32 bits usando a GTWVW
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem 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
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

PauloBergo,

Postei MP com o dbedit.prg que eu uso. Não apresentou problemas aqui.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Mensagem 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.
Sem mais
Wagner Nunes
www.vagucs.com.br
paulobergo
Usuário Nível 1
Usuário Nível 1
Mensagens: 30
Registrado em: 09 Nov 2007 08:54
Localização: Juiz de Fora-MG

Mensagem 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!
Não se vê bem com insolação... é essencial cobrir os olhos...
Responder