xHarbour pesquisa lenta com o Seek
Moderador: Moderadores
xHarbour pesquisa lenta com o Seek
olá pessoal, comecei a fazer os primeiros testes la no meu cliente com o xHarbour, copiei o executável para o Servidor, recriei os indices e foi bem rápido a criação dos NSX, mas nas estações, as pesquisas com Seek está muito lenta, tem hora que o vendedor acha que o sistema travou de tão lenta que está a procura com Seek, no Dbedit, la na estação, se correr registro por registro mantendo a seta pressionada, percebe-se também que o processamento é lento.
Voltei para o executável Clipper, pois da forma como está, está muito lento, no Clipper a pesquisa está boa, a forma de fazer pesquisa no xHarbour tem alguma diferença do Clipper, tanto na criaçao dos indices como no Seek ?
Lá no cliente ainda é o XP, quero fazer os testes para depois mudar para windows 7 64 bits.
crio os indices assim:
INDEX ON CODIGO PARA icodigo
SEEK icodigo
obrigado.
Voltei para o executável Clipper, pois da forma como está, está muito lento, no Clipper a pesquisa está boa, a forma de fazer pesquisa no xHarbour tem alguma diferença do Clipper, tanto na criaçao dos indices como no Seek ?
Lá no cliente ainda é o XP, quero fazer os testes para depois mudar para windows 7 64 bits.
crio os indices assim:
INDEX ON CODIGO PARA icodigo
SEEK icodigo
obrigado.
xHarbour pesquisa lenta com o Seek
Vocês acham que com CDX a pesquisa ficará melhor em rede, estou usando NSX
tenho que mudar muitos comandos ?
Eu crio vários indices para cada tabela:
use produtos
index on codigo to indcodigo
index on descricao to inddescri
aqui no forum achei da forma descrita abaixo, isso faz diferença na performance em rede ?
Para indexar com .CDX:
USE arquivo
INDEX ON chave1 TAG arquivo1 TO arquivo
INDEX ON chave2 TAG arquivo2 TO arquivo
...
INDEX ON chave15 TAG arquivo15 TO arquivo
USE arquivo INDEX arquivo
tenho que mudar muitos comandos ?
Eu crio vários indices para cada tabela:
use produtos
index on codigo to indcodigo
index on descricao to inddescri
aqui no forum achei da forma descrita abaixo, isso faz diferença na performance em rede ?
Para indexar com .CDX:
USE arquivo
INDEX ON chave1 TAG arquivo1 TO arquivo
INDEX ON chave2 TAG arquivo2 TO arquivo
...
INDEX ON chave15 TAG arquivo15 TO arquivo
USE arquivo INDEX arquivo
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
xHarbour pesquisa lenta com o Seek
Principais características:
. Os índices .CDX são bem menores do que os .NTX criados pelo Clipper;
. Cria índices condicionais através das cláusulas FOR, WHILE, REST e NEXT;
. Cria arquivos de índices compostos que contém até 99 subíndices ou TAGS em um único arquivo reduzindo, assim, o número de arquivos abertos em nível do DOS;
. Como o Clipper permite apenas 15 arquivos associados e abertos com a área atual, o uso dos arquivos CDX permite a abertura de mais arquivos de índices sem sobrecarregar o número de arquivos que o DOS manipula.
Para que o RDD DBFCDX funcione corretamente, devem ser seguidos os seguintes passos:
1. Acrescente as linhas abaixo no início do seu programa principal:
ANNOUNCE RDDSYS
REQUEST DBFCDX, DBFFPT
REQUEST OrdKeyNo, OrdKeyCount, OrdCreate, OrdKeyGoto
RDDSETDEFAULT("DBFCDX")
2. Para criar os arquivos de índices, você deve usar o seguinte comando:
SELECT 1
USE CLIENTES
INDEX ON codigo TAG indice1 TO cliente1
INDEX ON nome TAG indice2 TO cliente1
Observe que cada campo chave tem um TAG diferente (indice1 e indice2), mas todos estão sendo direcionados para um mesmo arquivo (cliente1), com isto será criado um arquivo de índice chamado CLIENTE1.CDX, com dois subíndices, um indexado pelo código do cliente e outro pelo nome do cliente.
3. Para mudar a ordem em um arquivo de índice CDX, você deve proceder da seguinte forma:
ORDSETFOCUS("INDICE2")
Com este comando você vai selecionar o subíndice "INDICE2", que está indexado pelo campo nome do cliente.
ORDSETFOCUS("INDICE1")
Retorna ao subíndice principal, que está indexado pelo campo código do cliente.
Se o comando ORDSETFOCUS( ) não for especificado, a ordem será sempre a do primeiro subíndice criado, neste caso será o indice1, pelo código.
4. Para linkar um programa com o RDD DBFCDX, deve ser acrescentada a LIB DBFCDX durante o processo de linkagem:
5. Os comandos abaixos continuam sendo usados da mesma forma:
. SET INDEX TO - Abre um arquivo de índice;
. CLOSE ALL - Fecha todos os arquivos de dados e índices associados.
Analizemos Abaixo:
abs
)
. Os índices .CDX são bem menores do que os .NTX criados pelo Clipper;
. Cria índices condicionais através das cláusulas FOR, WHILE, REST e NEXT;
. Cria arquivos de índices compostos que contém até 99 subíndices ou TAGS em um único arquivo reduzindo, assim, o número de arquivos abertos em nível do DOS;
. Como o Clipper permite apenas 15 arquivos associados e abertos com a área atual, o uso dos arquivos CDX permite a abertura de mais arquivos de índices sem sobrecarregar o número de arquivos que o DOS manipula.
Para que o RDD DBFCDX funcione corretamente, devem ser seguidos os seguintes passos:
1. Acrescente as linhas abaixo no início do seu programa principal:
ANNOUNCE RDDSYS
REQUEST DBFCDX, DBFFPT
REQUEST OrdKeyNo, OrdKeyCount, OrdCreate, OrdKeyGoto
RDDSETDEFAULT("DBFCDX")
2. Para criar os arquivos de índices, você deve usar o seguinte comando:
SELECT 1
USE CLIENTES
INDEX ON codigo TAG indice1 TO cliente1
INDEX ON nome TAG indice2 TO cliente1
Observe que cada campo chave tem um TAG diferente (indice1 e indice2), mas todos estão sendo direcionados para um mesmo arquivo (cliente1), com isto será criado um arquivo de índice chamado CLIENTE1.CDX, com dois subíndices, um indexado pelo código do cliente e outro pelo nome do cliente.
3. Para mudar a ordem em um arquivo de índice CDX, você deve proceder da seguinte forma:
ORDSETFOCUS("INDICE2")
Com este comando você vai selecionar o subíndice "INDICE2", que está indexado pelo campo nome do cliente.
ORDSETFOCUS("INDICE1")
Retorna ao subíndice principal, que está indexado pelo campo código do cliente.
Se o comando ORDSETFOCUS( ) não for especificado, a ordem será sempre a do primeiro subíndice criado, neste caso será o indice1, pelo código.
4. Para linkar um programa com o RDD DBFCDX, deve ser acrescentada a LIB DBFCDX durante o processo de linkagem:
5. Os comandos abaixos continuam sendo usados da mesma forma:
. SET INDEX TO - Abre um arquivo de índice;
. CLOSE ALL - Fecha todos os arquivos de dados e índices associados.
Analizemos Abaixo:
Código: Selecionar todos
INDEX ON ;
TAG TO ;
FOR ;
WHILE ;
NEXT | RECORD | REST | ALL ;
UNIQUE ;
ASCENDING | DESCENDING ;
EVAL EVERY ;
USECURRENT ;
ADDITIVE ;
CUSTOM ;
NOOPTIMIZE
xHarbour pesquisa lenta com o Seek
olá Kapiaba, obrigado por sua atenção
No programa principal estou fazendo assim, conforme sua sugestão:
ANNOUNCE RDDSYS
REQUEST DBFCDX,DBFFPT
REQUEST OrdKeyNo, OrdKeyCount, OrdCreate, OrdKeyGoto
RDDSETDEFAULT("DBFCDX")
estou linkando assim:
C:\xHarbour\BIN\XBuild LOJA.EXE.XBP
UPX LOJA.EXE
onde eu tenho que acrescentar a LIB DBFCDX, durante o processo de linkagem, estou com essa dúvida.
obrigado.
Código: Selecionar todos
Para linkar um programa com o RDD DBFCDX, deve ser acrescentada a LIB DBFCDX durante o processo de linkagem:No programa principal estou fazendo assim, conforme sua sugestão:
ANNOUNCE RDDSYS
REQUEST DBFCDX,DBFFPT
REQUEST OrdKeyNo, OrdKeyCount, OrdCreate, OrdKeyGoto
RDDSETDEFAULT("DBFCDX")
estou linkando assim:
C:\xHarbour\BIN\XBuild LOJA.EXE.XBP
UPX LOJA.EXE
onde eu tenho que acrescentar a LIB DBFCDX, durante o processo de linkagem, estou com essa dúvida.
obrigado.
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
xHarbour pesquisa lenta com o Seek
Olá, a LIB DBFCDX fica em: C:\xHarbour\Lib
Você deve incorporar junto com as demais Lib do seu sistema.
abs.
Você deve incorporar junto com as demais Lib do seu sistema.
abs.
xHarbour pesquisa lenta com o Seek
Olá, é isso que eu não estou sabendo como se faz, quando era no clipper eu incorporava a lib no LOJA.LNK, mas no xHourbour eu não sei coloco essa lib se é no programa principal ou no linkador, entendeu.
xHarbour pesquisa lenta com o Seek
O arquivo abaixo é o LOJA.EXE.XBP, e compilo assim: C:\xHarbour\BIN\XBuild LOJA.EXE.XBP, descobri tambem que o SEEK acha rapidamente, o que esta demorando é para posicionar o cursor no registro encontrado no Dbedit, demora para montar o Dbedit quando encontra um registro.
CINI =
C_OUTPUTFOLDER =
DEFFILE =
INCLUDEFOLDERS =
LAUTORUN =
LDEBUG = .F.
LGUI = .F.
LIBFOLDERS =
LMT = .F.
LNOAUTOFWH = .F.
LPRG_CLASSICDEBUG = .F.
LPRG_DEBUG = .F.
LUSEDLL = .F.
MAPFILE =
MYC_FLAGS =
MYDEFINES =
MYLINK_FLAGS = -Gn -s
MYPRG_FLAGS =
MYRC_FLAGS =
MYSLY_FLAGS =
OUTPUTFOLDER =
PRG_OUTPUTFOLDER =
RC_OUTPUTFOLDER =
RUNARGUMENTS =
SLY_OUTPUTFOLDER =
STARTIN =
TARGETFOLDER =
[LOJA.PRG]
MYC_FLAGS =
MYDEFINES =
MYPRG_FLAGS =
[FUNCOES.PRG]
MYC_FLAGS =
MYDEFINES =
MYPRG_FLAGS =
[REINDEXA.PRG]
MYC_FLAGS =
MYDEFINES =
MYPRG_FLAGS =
[CADUSU.PRG]
MYC_FLAGS =
MYDEFINES =
MYPRG_FLAGS =
CINI =
C_OUTPUTFOLDER =
DEFFILE =
INCLUDEFOLDERS =
LAUTORUN =
LDEBUG = .F.
LGUI = .F.
LIBFOLDERS =
LMT = .F.
LNOAUTOFWH = .F.
LPRG_CLASSICDEBUG = .F.
LPRG_DEBUG = .F.
LUSEDLL = .F.
MAPFILE =
MYC_FLAGS =
MYDEFINES =
MYLINK_FLAGS = -Gn -s
MYPRG_FLAGS =
MYRC_FLAGS =
MYSLY_FLAGS =
OUTPUTFOLDER =
PRG_OUTPUTFOLDER =
RC_OUTPUTFOLDER =
RUNARGUMENTS =
SLY_OUTPUTFOLDER =
STARTIN =
TARGETFOLDER =
[LOJA.PRG]
MYC_FLAGS =
MYDEFINES =
MYPRG_FLAGS =
[FUNCOES.PRG]
MYC_FLAGS =
MYDEFINES =
MYPRG_FLAGS =
[REINDEXA.PRG]
MYC_FLAGS =
MYDEFINES =
MYPRG_FLAGS =
[CADUSU.PRG]
MYC_FLAGS =
MYDEFINES =
MYPRG_FLAGS =
xHarbour pesquisa lenta com o Seek
ola Kapiaba, estou compilando e gerando executavel normalmente, estou tendo dois problemas, instalei o sistema la no meu cliente, com um servidor e mais cinco estações com windows xp:
Demora para carregar o executavel (45 segundos) quando entro no sistema pela estação pela primeira vez, a partir da segunda carrega rapidamente
Percebi tambem que o Seek localiza rapidamente um registro, mas demora muito para o cursor posicionar no registro encontrado e remontar o Dbedit.
Demora para carregar o executavel (45 segundos) quando entro no sistema pela estação pela primeira vez, a partir da segunda carrega rapidamente
Percebi tambem que o Seek localiza rapidamente um registro, mas demora muito para o cursor posicionar no registro encontrado e remontar o Dbedit.
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
xHarbour pesquisa lenta com o Seek
um servidor e mais cinco estações com windows xp
O servidor, qual é o rWindows?
E para se dar um SEEK(), é necessário SETAR o indice correto.
supondo que fosse por codigo:
SET ORDER TO 01 // TAG do .CDX para se dar um SEEK() por código do cliente, por exemplo.
Se fosse por NOME do Cliente:
SET ORDER TO 02 // Segunda TAG do .CDX para se dar um SEEK() por nome (alfa).
Problema de lentidão, pode ter várias causas, inclusive, virus.
abs.
O servidor, qual é o rWindows?
E para se dar um SEEK(), é necessário SETAR o indice correto.
supondo que fosse por codigo:
SET ORDER TO 01 // TAG do .CDX para se dar um SEEK() por código do cliente, por exemplo.
Se fosse por NOME do Cliente:
SET ORDER TO 02 // Segunda TAG do .CDX para se dar um SEEK() por nome (alfa).
Problema de lentidão, pode ter várias causas, inclusive, virus.
abs.
xHarbour pesquisa lenta com o Seek
são todos windows xp, inclusive o servidor, está localizando o registro desejado, só está demorando para fazer a atualização da tela do dbedit, ele posiciona no registro desejado, mas demora.
La no cliente estou testando o xHarbour, mas como está lento voltei ele para o Clipper e no Clipper, funciona rapidinho, seria o caso de usar o Tbrowse ?
obrigado.
La no cliente estou testando o xHarbour, mas como está lento voltei ele para o Clipper e no Clipper, funciona rapidinho, seria o caso de usar o Tbrowse ?
obrigado.
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
xHarbour pesquisa lenta com o Seek
Então, na realidade, quem está lento é dbedit?
Pode mostrar o Codigo?
Pode mostrar o Codigo?
xHarbour pesquisa lenta com o Seek
olá, eu acho que é o Dbedit, pesquisando eu já vi relatos que o Dbedit no xHarbour fica lento, pelo debugador na hora do Seek não tem problemas, mas quando chega no Return(1) que é para parar no registro localizado ai demora.
Eu posso mostrar o código sim, mas ele é muito grande, se mostrar somente uma parte do Dbedit, ficaria mais facil para você dar uma olhada ?
Eu posso mostrar o código sim, mas ele é muito grande, se mostrar somente uma parte do Dbedit, ficaria mais facil para você dar uma olhada ?
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
xHarbour pesquisa lenta com o Seek
Voce faz assim no xHarbour?
Código: Selecionar todos
/*
* New enhanced DBEdit() test
*
* See how aCols[1] is an array of 2 items
* The first is, as usual, the column data
* The second is the codeblock that returns a pair of {std,enh} colors
* just like in tbrowse :-)
*
* NOTE: - Color codeblock takes a parameter (actual data)
* Iïve ignored (used SALARY instead) it here to demostrate how flexible a TBRowse is.
* - Try moving columns with K_CTRL_UP & K_CTRL_DOWN
*
* Is DBEdit() deprecated? NO!
* Enjoy
* Mauricio <maurifull@datafull.com>
* Comments, suggestions, bugs report welcome
*
*/
#include "inkey.ch"
#include "dbedit.ch"
Function Main()
Local aCols := {{"PadR(AllTrim(FIRST)+' '+AllTrim(LAST),30)", {|x| IIf(FIELD->SALARY<10000, {3,2}, IIf(FIELD->SALARY<100000,{1,2},{4,5}))}},;
"CITY",;
"SALARY"}
set scoreboard off
Use test
@maxrow(),0 say "<Ctrl-Down/Up>-Toggle columns <Space bar>-Edit cell"
DBEdit(0,0,MaxRow()-1,MaxCol(), aCols, "TstFnc",,{"Name", "City", "Salary"})
Close
Cls
? "Have a nice day ;)"
?
Return Nil
Function TstFnc(nMode, nCol, oTBR)
LOCAL GetList := {}
Local nRet := DE_CONT
Do Case
Case nMode == DE_INIT // EXTENSION: Initialization mode
oTBR:colorSpec := "n/bg,w/n,r/bg,w+/bg,w+/gr"
Case nMode == DE_HITTOP
Keyboard Chr(K_CTRL_PGDN)
Case nMode == DE_HITBOTTOM
Keyboard Chr(K_CTRL_PGUP)
Case LastKey() == K_ESC
nRet := DE_ABORT
Case LastKey() == K_SPACE .And. oTBR:getColumn(nCol):heading != "Name"
SetCursor(1)
@ Row(), Col() Get &(oTBR:getColumn(nCol):heading)
Read
SetCursor(0)
Clear TypeAhead
End
Return nRet
