Apagar um indice TEMPORARY
Moderador: Moderadores
- rubens
- Colaborador

- Mensagens: 1520
- Registrado em: 16 Ago 2003 09:05
- Localização: Nova Xavantina - MT
Apagar um indice TEMPORARY
Olá...
Tô estudando o uso de arquivos e índices na memória... Tô preso no seguinte:
Arquivo dbf no disco
Clientes.dbf
Indice CDX
Clientes.CDX
Tags
Codigo
Nome
CPF
Preciso criar um índice TEMPORARY por data de nascimento
Como eu crio esse Indice sem perder as tags anteriores? Vou ter que usar OrdKeyAdd() ou basta simplesmente criar a tag com index on .... TEMPORARY?
Depois que eu criar e usá-lo como faço para apagar?
Obrigado
Rubens
Tô estudando o uso de arquivos e índices na memória... Tô preso no seguinte:
Arquivo dbf no disco
Clientes.dbf
Indice CDX
Clientes.CDX
Tags
Codigo
Nome
CPF
Preciso criar um índice TEMPORARY por data de nascimento
Como eu crio esse Indice sem perder as tags anteriores? Vou ter que usar OrdKeyAdd() ou basta simplesmente criar a tag com index on .... TEMPORARY?
Depois que eu criar e usá-lo como faço para apagar?
Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você
"
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
Apagar um indice TEMPORARY
Tente:
Abs
Código: Selecionar todos
SET ORDER TO 0 // (Zero)
SELECT Seubancoanterior
ou
CLOSE( cAlias )
E chame a rotina de Indices do programa.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Apagar um indice TEMPORARY
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- rubens
- Colaborador

- Mensagens: 1520
- Registrado em: 16 Ago 2003 09:05
- Localização: Nova Xavantina - MT
Apagar um indice TEMPORARY
Bom dia...
Tentei do jeito que o Quintas passou e funcionou era isso, mais simples do que eu tava imaginando... e para apagar é só fechar o arquivo... o temporário apaga sozinho...
Obrigado
Tentei do jeito que o Quintas passou e funcionou era isso, mais simples do que eu tava imaginando... e para apagar é só fechar o arquivo... o temporário apaga sozinho...
Obrigado
"Eu e minha casa servimos ao Senhor e você
"
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Apagar um indice TEMPORARY
Ele é criado num CDX separado. Só vai ser usado se o CDX temporário for aberto.e para apagar é só fechar o arquivo... o temporário apaga sozinho...
Mas se não for apagado, vai continuar no disco.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- rubens
- Colaborador

- Mensagens: 1520
- Registrado em: 16 Ago 2003 09:05
- Localização: Nova Xavantina - MT
Apagar um indice TEMPORARY
Quintas deixa ver se entendi...
Meu código:
O arquivo de clientes tem quatro tags no CDX
Daí na linha 30 eu crio a tag temporária no indice... Index on datref tag data ADDITIVE TEMPORARY
e na linha 32 apago essa tag com o comando OrdDestroy(ORDKEY(INDEXORD()) ).. ( É esse mesmo o comando? tentei também OrdKeyDel() ) com OrdkeyDel retorna .f. e OrdDestroy retorna .t.
Só que quando uso o ordcount() retorna que ainda existe 5 tags no indice..
Se foi criado com TEMPORARY não deveria ser na memória? A partir do momento que uso o orddestroy nao tinha que apagar essa tag?
Se apago o CDX e uso a rotina de indexação para criar o índice de novo e cria com 4 tags o que é certo...
O que tô fazendo de errado?
Obrigado
Rubens
Meu código:
Código: Selecionar todos
#include "hbgtinfo.ch"
REQUEST DBFCDX
REQUEST HB_GT_WVT_DEFAULT
FUNCTION MAIN
RDDSETDEFAULT('DBFCDX')
DBSETDRIVER('DBFCDX')
Set Path to ..\TABELAS
Set Date Brit
Set Epoch to Year( Date()-80 )
Set Cent On
Set Deleted On
Set Autopen On
hb_gtinfo(HB_GTI_MAXIMIZED, .T.)
Use Cliente.DBF alias Cli New Share
cTEXTO := ''
FOR X = 1 TO OrdCount()
DbSetOrder(X)
cTEXTO += STR(X,2)+'-'+ORDKEY(INDEXORD()) + HB_EOL()
NEXT
Alert( cTexto )
DbSetOrder(2)
DbGoTop()
Browse()
Index on datref tag data ADDITIVE TEMPORARY
DbSetOrder(5)
OrdDestroy( ORDKEY(INDEXORD()) )
cTEXTO := ''
FOR X = 1 TO OrdCount()
DbSetOrder(X)
cTEXTO += STR(X,2)+'-'+ORDKEY(INDEXORD()) + HB_EOL()
NEXT
Alert( cTexto )
DbCloseall()
RETURN NIL
Daí na linha 30 eu crio a tag temporária no indice... Index on datref tag data ADDITIVE TEMPORARY
e na linha 32 apago essa tag com o comando OrdDestroy(ORDKEY(INDEXORD()) ).. ( É esse mesmo o comando? tentei também OrdKeyDel() ) com OrdkeyDel retorna .f. e OrdDestroy retorna .t.
Só que quando uso o ordcount() retorna que ainda existe 5 tags no indice..
Se foi criado com TEMPORARY não deveria ser na memória? A partir do momento que uso o orddestroy nao tinha que apagar essa tag?
Se apago o CDX e uso a rotina de indexação para criar o índice de novo e cria com 4 tags o que é certo...
O que tô fazendo de errado?
Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você
"
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Apagar um indice TEMPORARY
É que o código que passei foi sem o uso de temporary.
Esse temporary é novidade pra mim, vou testar depois.
Esse temporary é novidade pra mim, vou testar depois.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Apagar um indice TEMPORARY
Curiosidade:
Eu crio meus temporários na pasta TEMP do Windows, o que faz com que os arquivos sejam locais e possam ser apagados pelo Windows, caso eu esqueça de apagar.
Como funciona esse TEMPORARY?
Eu crio meus temporários na pasta TEMP do Windows, o que faz com que os arquivos sejam locais e possam ser apagados pelo Windows, caso eu esqueça de apagar.
Como funciona esse TEMPORARY?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Apagar um indice TEMPORARY
Quintas,
A ideia do temporary é criar um indice em memória, eu até já procurei no meu computador se é criado um arquivo temporário, não achei, eu uso direto este recurso a vantagem é que não fica "lixo" após o uso, quando o dbf é fechado ele some.
eu já fiz um teste com 1 milhão de registro, levou 5 segundos para gerar o índice temporary, claro que isso depende dos recurso que o computador possui, processaador, hd e memória disponível
A ideia do temporary é criar um indice em memória, eu até já procurei no meu computador se é criado um arquivo temporário, não achei, eu uso direto este recurso a vantagem é que não fica "lixo" após o uso, quando o dbf é fechado ele some.
eu já fiz um teste com 1 milhão de registro, levou 5 segundos para gerar o índice temporary, claro que isso depende dos recurso que o computador possui, processaador, hd e memória disponível
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- rubens
- Colaborador

- Mensagens: 1520
- Registrado em: 16 Ago 2003 09:05
- Localização: Nova Xavantina - MT
Apagar um indice TEMPORARY
Bom dia...
Então Asimoes o problema é que quando tá fechando o DBF o Indice temporário continua no CDX.. Daí quando abre o dbf de novo aquele ultimo indice temporary que foi inserido continua lá...
Ou não é assim que funciona... ?
Vai ser criado um novo CDX na memória ?
Não posso criar a nova tag no CDX já existente com ADDITIVE?
Obrigado
Rubens
Então Asimoes o problema é que quando tá fechando o DBF o Indice temporário continua no CDX.. Daí quando abre o dbf de novo aquele ultimo indice temporary que foi inserido continua lá...
Ou não é assim que funciona... ?
Vai ser criado um novo CDX na memória ?
Não posso criar a nova tag no CDX já existente com ADDITIVE?
Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você
"
Apagar um indice TEMPORARY
Rubens,
O indice temporário é eliminado no fechamento da tabela porque ele é temporário.
Supondo que você tenha um dbf com 1 indice cdx com 3 chaves ou tags, quando você abre a tabela e faz um set index to ind.cdx e depois cria outro indice com
index on chave tag teste temporary additive, este indice novo será o 4 indice da tabela enquanto ela estiver aberta, fechou a tabela (dbclosearea()) essa tag desse indice temporário é eliminado.
O indice temporário é eliminado no fechamento da tabela porque ele é temporário.
Supondo que você tenha um dbf com 1 indice cdx com 3 chaves ou tags, quando você abre a tabela e faz um set index to ind.cdx e depois cria outro indice com
index on chave tag teste temporary additive, este indice novo será o 4 indice da tabela enquanto ela estiver aberta, fechou a tabela (dbclosearea()) essa tag desse indice temporário é eliminado.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- rubens
- Colaborador

- Mensagens: 1520
- Registrado em: 16 Ago 2003 09:05
- Localização: Nova Xavantina - MT
Apagar um indice TEMPORARY
Então Asimoes...
Acho que tô fazendo certo...
Quando executo o programa que eu postei acima...
Ele abre o arquivo cliente.dbf , como o set autopen está on, ele já abre o cliente.cdx
A partir da linha 20 eu mando listar as tags do indice... Na linha 30 eu crio o índice temporário na memória
E na linha 34 mando listar de novo e beleza o índice temporário foi criado e adicionado.. Só que se eu fechar esse programa e executar novamente, quando ele manda listar a primeira vez, já mostra as 5 tags. Daí tentei apagar a tag da ordem 5 com OrdDestroy( ORDKEY(INDEXORD()) )
Também não apagou... Continua lá a 5 tag...
O bicho tá pegando aí, como faço para apagar essa 5ª tag??? Já que deveria ter apagado automaticamente...
Obrigado
Rubens
Acho que tô fazendo certo...
Quando executo o programa que eu postei acima...
Ele abre o arquivo cliente.dbf , como o set autopen está on, ele já abre o cliente.cdx
A partir da linha 20 eu mando listar as tags do indice... Na linha 30 eu crio o índice temporário na memória
E na linha 34 mando listar de novo e beleza o índice temporário foi criado e adicionado.. Só que se eu fechar esse programa e executar novamente, quando ele manda listar a primeira vez, já mostra as 5 tags. Daí tentei apagar a tag da ordem 5 com OrdDestroy( ORDKEY(INDEXORD()) )
Também não apagou... Continua lá a 5 tag...
O bicho tá pegando aí, como faço para apagar essa 5ª tag??? Já que deveria ter apagado automaticamente...
Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você
"
Apagar um indice TEMPORARY
Rubens,
Eu não faço SET OPEN ON, eu sempre faço SET INDEX TO (CDXTABELA)
Quando eu preciso usar temporário principalmente em rotinas de impressão logo após abrir a tabela faço ordListClear() e depois eu crio o índice temporário.
Eu não faço SET OPEN ON, eu sempre faço SET INDEX TO (CDXTABELA)
Quando eu preciso usar temporário principalmente em rotinas de impressão logo após abrir a tabela faço ordListClear() e depois eu crio o índice temporário.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Apagar um indice TEMPORARY
Vou testar isso.
Não precisa nada adicional? Lembro que pra usar mem: precisa de alguma referência a mais, pra não ter comportamento diferente.
Não precisa nada adicional? Lembro que pra usar mem: precisa de alguma referência a mais, pra não ter comportamento diferente.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Apagar um indice TEMPORARY
Convém confirmar se realmente o temporário é liberado.
De repente tá ocupando alguma coisa em algum lugar.
Se ao recarregar o EXE apareceu o índice... em algum lugar ele ficou.... rs
Sendo assim, vou preferir meus temporários.... rs
De repente tá ocupando alguma coisa em algum lugar.
Se ao recarregar o EXE apareceu o índice... em algum lugar ele ficou.... rs
Sendo assim, vou preferir meus temporários.... rs
Código: Selecionar todos
mTmpFile := MyTempFile()
INDEX ON ... TAG temp TO ( mTmpFile ) ADDITIVE
...
use
fErase( mTmpFile )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/