Dúvidas sobre criação de índices???
Moderador: Moderadores
- Marcos
- Usuário Nível 3

- Mensagens: 355
- Registrado em: 20 Set 2003 09:16
- Localização: Cáceres/Mato Grosso
Dúvidas sobre criação de índices???
Olá a todos do fórum, estou precisando de uma informação de suma importância para o meu pequeno sistema, e consequentemente para o meu aprendizado, certo da colaboração dos Senhores aí vai a dúvida:
Na rotina de indexação do meu sistema, ele dá um Pack em todos os arquivos de índices antes de cria-los novamente, isto faz com que a Indexação demore bastante devido a alguns arquivos DBF´S com muitos registros, gostaria de saber se é necessário em todas as Indexações este procedimento? Todas as vezes que o sistema é interrompido por algum erro, é executado a Reorganização onde encontra-se esta rotina que dá o Pack nos arquivos de índices.
Desde já obrigado a todos pela atenção.
Marcos.
Da Roça.
Na rotina de indexação do meu sistema, ele dá um Pack em todos os arquivos de índices antes de cria-los novamente, isto faz com que a Indexação demore bastante devido a alguns arquivos DBF´S com muitos registros, gostaria de saber se é necessário em todas as Indexações este procedimento? Todas as vezes que o sistema é interrompido por algum erro, é executado a Reorganização onde encontra-se esta rotina que dá o Pack nos arquivos de índices.
Desde já obrigado a todos pela atenção.
Marcos.
Da Roça.
-
Dudu_XBase
- Membro Master

- Mensagens: 1071
- Registrado em: 25 Ago 2003 16:55
...cara se vc tem um banco de mais de 100 megas....como eu tenho...se vc precisar reorganizar por causa de indice corrompido...eh bom rodar sem pack....soh pra dar solução rápida...mas...a reorganização msm eh bom usar o pack....
Pérche ?? Porque qdo vc exclui um registro ele fica marcado como excluido certo.....se vc usa o comando set delete on ... para não mostrar os excluídos o q ele faz....ele filtra os regs do dbfs pra naum mostrar os excluidos....se vc tiver mta exclusão nesse banco....vc notara depois de um certo tempo sem "packear" q ele ficara lerdo pra "caramba"..rs...perde performance....isso eu notei....ai coloquei uma rotina q a guardava o ultimo dia reorganizado se desse mais de 4 dias..."pack" no bixo...se vc usa indices Ntx...migre para o CDX ou NSX indices compostos....eles tb saum gerados mais rapidamente q o padrão NTX....espero ter ti ajudado...
Pérche ?? Porque qdo vc exclui um registro ele fica marcado como excluido certo.....se vc usa o comando set delete on ... para não mostrar os excluídos o q ele faz....ele filtra os regs do dbfs pra naum mostrar os excluidos....se vc tiver mta exclusão nesse banco....vc notara depois de um certo tempo sem "packear" q ele ficara lerdo pra "caramba"..rs...perde performance....isso eu notei....ai coloquei uma rotina q a guardava o ultimo dia reorganizado se desse mais de 4 dias..."pack" no bixo...se vc usa indices Ntx...migre para o CDX ou NSX indices compostos....eles tb saum gerados mais rapidamente q o padrão NTX....espero ter ti ajudado...
________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle
- Marcos
- Usuário Nível 3

- Mensagens: 355
- Registrado em: 20 Set 2003 09:16
- Localização: Cáceres/Mato Grosso
Boa Tarde Dudu_XBase, eu uso índices com extensão NSX, mas já deu para eu ter uma idéia a respeito do assunto, só uma outra dúvida: C for organizar somente por causa de Índices Corrompidos é necessário estar em modo Exclusive?
Obrigado pela atenção, foi muito importante sua idéia e experiência.
Abraços,
Marcos
Da Roça.
Obrigado pela atenção, foi muito importante sua idéia e experiência.
Abraços,
Marcos
Da Roça.
-
Dudu_XBase
- Membro Master

- Mensagens: 1071
- Registrado em: 25 Ago 2003 16:55
Sim sempre reorganize em modo exclusivo...modo compartilhado soh indices temporários...
________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle
Dá até pra indexar, mas o resultado não vai ser o que vc tem em mente... Imagina, no registro X, CODIGO=100 e VALOR=50:
Código: Selecionar todos
inde on codigo+valor to indice
* vai ser usado o valor 150 (100+50) no índice...
* e não é isso o que vc quer, certo?
inde on strzero(codigo,5,0)+strzero(valor,7,2) to indice
* vai ser usado o valor '001000050.00' ('00100'+'0050.00') no índice...Uma chave de índice pode conter valores numéricos. Inclusive combinando dois campos distintos. Mas isso tem aplicação apenas em raríssimas ocasiões, onde essa combinação gere uma informação numérica inteligível.ABeltrani escreveu:Para indexar um DBF por dois campos numéricos, preciso obrigatoriamente converte-los para string ? Exemplo:
inde on str(codigo)+str(valor) to indice1
Grato
No entanto, ao combinar valores numéricos convertendo-os para strings, você deve atentar para o método que o compilador usa para comparar strings. Do jeito que demonstrou está correto, embora também se possa usar StrZero(), como demonstrou o Eolo. Providencialmente, a conversão de número para string, por meio de Str(), gera uma string com espaços à esquerda. Se fossem à direita, seria problema na certa.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
O que fatalmente aconteceria com o segundo campo. Por isso nesse caso em que o segundo campo em diante for numerico, converta com strzero().Providencialmente, a conversão de número para string, por meio de Str(), gera uma string com espaços à esquerda. Se fossem à direita, seria problema na certa.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MySQL c/ SQLRDD
HwGui + GTWVG
Nem sempre. Vai depender do teor do segundo campo e de como o conjunto é interpretado. Além do quê, somados, os dois mantém seus espaços à esquerda. Trocar os espaços por zeros não muda muita coisa.
Aliás, é sempre bom lembrar que StrZero() consome mais tempo de CPU do que Str(). Como é uma questão acerca de uma chave de índice, que poderá ser processada milhares de vezes, é mais prudente usar StrZero() apenas se for realmente necessário.
Aliás, é sempre bom lembrar que StrZero() consome mais tempo de CPU do que Str(). Como é uma questão acerca de uma chave de índice, que poderá ser processada milhares de vezes, é mais prudente usar StrZero() apenas se for realmente necessário.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Índices
Boa tarde amigos !
Pegando um gancho aquí no "Índice" ... eu tenho uma rotina de relatório onde imprimo o código e o nome do produto com respectivo subtotal. Porém o nº de identificação não sai em órdem. Estive lendo sobre "Ascend()" mas não aplicá-lo adequadamente. Alias, nunca usei. Como poderia resolver ?
Obrigado !
Netavin
Pegando um gancho aquí no "Índice" ... eu tenho uma rotina de relatório onde imprimo o código e o nome do produto com respectivo subtotal. Porém o nº de identificação não sai em órdem. Estive lendo sobre "Ascend()" mas não aplicá-lo adequadamente. Alias, nunca usei. Como poderia resolver ?
Obrigado !
Netavin
Código: Selecionar todos
Function Rela_tl
LOCAL L, PG, VARI, Linh, Num, Tot
LOCAL VTOTAL:=000000.00
LOCAL VSUBTOTAL:=000000.00
Sele 1
Use CADTORA index placa ,esse
If !File("placa.ntx")
Index on plac to placa
Else
Set Index to placa
Endif
If !File("esse.ntx")
Index on esse to esse
Else
Set Index to esse
Endif
Set Index to placa, esse
OrdSetFocus(2)
DbGoTop()
Tone(1800,1)
Linh:=0
vDtini:=Ctod(" ")
vDtfin:=Ctod(" ")
DispBox(Linh+37,C+14,Linh+42,C+41,chr(219),"BG/W")
@ Linh+38,C+15 Clear to Linh+41,C+40
Set Cursor on
@ Linh+39,C+16 Say "Data inicial:" Get vDtini Valid !Empty(vDtini)
@ Linh+40,C+16 Say "Data final :" Get vDtfin Valid !Empty(vDtfin)
Read
If Lastkey() = 27
Tone(1700,1)
Alert("Opera‡Æo abortada!")
DbCloseAll()
Return
Endif
Set Exac on
L :=0
Num :=0
Pg :=1
Tot :=0
Vari:=esse
Set Print on
Set Filter to Plac >=1 .and. Dtbx >= vDtini .and. Dtbx <= vDtfin
Set Printer to c:\Temp\Ent_tl.txt
Set Console off
Do While !Eof()
If L = 0
? PADC("MADEIREIRA CANELINHA LTDA",80)
? " Relat¢rio de plaquetas baixadas no per¡odo de "+ dtoc(vDtini) + " a " + Dtoc(vDtfin)
? " Relat¢rio em "+ dtoc(date()) + " …s "+Left(time(),5)+ "h"
? "P g.:" + Alltrim(STR(PG)) + Space(14) + lori
? "------------------------------------------------------------------------------"
? " Placa Roma M3 Essˆncia Data Bx"
? "------------------------------------------------------------------------------"
L:=7
Endif
If Dtbx < vDtini .or. Dtbx > vDtfin
Skip
Endif
If Alltrim(vari) # Alltrim(esse)
? " Subtotal: " + Transform(vsubtotal, "@e 9,999.999")
vtotal:=vtotal+vsubtotal
vsubtotal:=000000.00
vari:=esse
Endif
If Alltrim(vari) = Alltrim(esse)
? Space(1),PLAC,Space(2),ROMA,TTM3,Space(1),ESSE, dtbx
vsubtotal:=vsubtotal + ttm3
Endif
Dbskip()
L++
Num++
If Eof()
? " Subtotal: " + Transform(vsubtotal, "@e 9,999.999")
vtotal:=vtotal + vsubtotal
vari:=esse
Endif
Enddo
? "------------------------------------------------------------------------------"
? "Total baixado:" + Transform(vtotal, "@e 9,999.999") + " M3 / " + Alltrim(Str(Num)) + " toras."
Run Readme c:\Temp\Ent_tl.txt
Set Device to Screen
Set Print off
Set Console on
Set Printer to
DbCloseAll()
ReturnTK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
" Sem saber que era impossível, foi lá e fez !! "
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Eu não vi ainda sobre a sua questão de ordenação. Mas ví o final e percebí um erro grande. Você está chamado o REDME.EXE para ler seu arquivo texto antes dele ser finalizado pela sua rotina. Caberia colocar este comando: Run Readme c:\Temp\Ent_tl.txt logo após fechar o SET PRINTER TO (final do seu código)
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Índices
Olá Pablo!
Então colega. Quando trabalho na construção de qualquer rotina, vou fazendo e testando. Como funcionou da maneira que está ... ficou.
Seguindo sua idéia, fiz as alterações e também funcionou de igual forma.
Aguardo idéias dos colegas para solucionar o problema que escrevi no post inicial.
Muito obrigado !
Netavin
Então colega. Quando trabalho na construção de qualquer rotina, vou fazendo e testando. Como funcionou da maneira que está ... ficou.
Seguindo sua idéia, fiz as alterações e também funcionou de igual forma.
Aguardo idéias dos colegas para solucionar o problema que escrevi no post inicial.
Muito obrigado !
Netavin
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
" Sem saber que era impossível, foi lá e fez !! "
Qual é o formato desse número de identificação? Dê alguns exemplos. A resposta ao seu problema está na comparação ASCII. Certamente você deve estar se esquecendo de alguma coisa. Mas é coisa simples.eu tenho uma rotina de relatório onde imprimo o código e o nome do produto com respectivo subtotal. Porém o nº de identificação não sai em órdem. Estive lendo sobre "Ascend()" mas não aplicá-lo adequadamente. Alias, nunca usei. Como poderia resolver ?
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Re: Índices
Sim tudo bem, até onde você evoca o README.EXE eu diria que o seu relatório está quase terminado. É porque ja foi gravado, mas lembre que o arquivo estando aberto, ainda está sujeiro a gravar alguma "sujeira" da tela. Digamos então, que seria o mais indicado terminar fechando o direcionamento para arquivo, daí a criação poderiamos dizer que estaria disponível sem sofre interferências.Netavin escreveu:funcionou da maneira que está ... ficou.
Seria também BOM você listar a esturas dos DBFs e como o Maligno disse coloque algum exemplo. Para colocar exemplos ou criar o DBF que estão sendo usados no seu código pode ser utilizado as seguintes rotinas Clique aqui para ver, a fim de ser reproduzido e testado fielmente o seu exemplo, Netavin.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Índices
Salve malígno !!
o formato é numérico inteiro com 5 casas.
Um exemplo de relatório claro estéticamente seria no formato:
placa nome
1450 ipê
1451 ipê
1460 ipê
24345 ipê
... com as placas identificadoras em órdem crescente por exemplo. Poderia ser até em ordem contrária. Não faria diferença, contanto que esteja numa órdem.
Saúde e paz !!
[]´s
Netvin
o formato é numérico inteiro com 5 casas.
Um exemplo de relatório claro estéticamente seria no formato:
placa nome
1450 ipê
1451 ipê
1460 ipê
24345 ipê
... com as placas identificadoras em órdem crescente por exemplo. Poderia ser até em ordem contrária. Não faria diferença, contanto que esteja numa órdem.
Saúde e paz !!
[]´s
Netvin
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
" Sem saber que era impossível, foi lá e fez !! "
