Hi!
Nas minhas andanças pela NET, pesquisando no google artigos, fóruns, materiais... e outras firulas a respeito do xHarbour, VB, VFP... patati, patatá... e também algo mais profundo a respeito de índices CDX, me deparei num fórum (por ética, não citarei qual) onde há um tópico bem extenso sobre alguns testes com índices NTX e CDX. Uma pessoa defende o NTX; a outra, defende o CDX.
Tá interessante e postaram um teste que deixou-os alarmados (não esperavam!) pelo resultado (eu idem... fiz os testes e quase caí das pernas, tchê!).
E pior, um alega certos resultados em seus testes; outro alega outros resultados.
Vou postar os testes, mas antes quero fazer uma pergunta:
Ao abrir um arquivo com índices CDX e há índices com o mesmo nome do arquivo DBF (por exemplo, clientes.dbf e o índice, clientes.cdx), o índice é aberto junto automaticamente?
Os meus não abrem!
Agora, por favor, criem um arquivo DBF (vamos chamar de TOLEDO, para facilitar) com apenas um campo char, de tamanho 10, chamado NOME e insiram neste DBF cinco registros nesta seqüência:
MALIGNO
VAGNER
ADRIANA
MARCELO
ROCHINHA
Concluído esta estapa, compilem, linkem e rodem este teste aí embaixo (exemplo copiado lá do outro fórum) com índices NTX:
clear
use toledo new // Abre o arquivo num nova área
index on nome to toledo // Indexa o arquivo por nome com índices NTX
set index to toledo // Abre o índice (eu sei, não precisava esta linha!)
run dir TOLEDO.NTX // Exibirá o arquivo TOLEDO.NTX
inkey(0)
clear
dbedit() // Exibiu os dados indexados por nome, certo?
ferase("TOLEDO.NTX") // Comigo, o índice aberto FOI excluído!
clear
run dir TOLEDO.NTX // Não me mostrou o arquivo (foi mesmo excluído!)
inkey(0)
seek pad("ROCHINHA",10) // Comigo, o SEEK funcionou!
? found() // Comigo, indicou que o SEEK foi mesmo sucesso (.T.)
inkey(0)
dbedit() // Comigo, exibiu "ROCHINHA" e "VAGNER"!
quit
E aí? Comportou-se com vocês da mesma forma que comportou-se comigo?
Well... Por favor, façam mais este então só que agora com índices CDX:
REQUEST DBFCDX
RDDSETDEFAULT("DBFCDX")
DBSETDRIVER("DBFCDX")
clear
use toledo new // Abre o arquivo num nova área
index on nome tag nome // Indexa o arquivo por nome com índices CDX
set index to toledo // Abre o índice (eu sei, não precisava esta linha!)
run dir TOLEDO.CDX // Exibirá o arquivo TOLEDO.CDX
inkey(0)
clear
dbedit() // Exibiu os dados indexados por nome, certo?
ferase("TOLEDO.CDX") // Comigo, o índice aberto FOI excluído!
clear
run dir TOLEDO.CDX // Não me mostrou o arquivo (foi mesmo excluído!)
inkey(0)
seek pad("ROCHINHA",10) // Comigo, o SEEK funcionou!
? found() // Comigo, indicou que o SEEK foi mesmo sucesso (.T.)
inkey(0)
dbedit() // Comigo, exibiu "ROCHINHA" e "VAGNER"!
quit
(Neste exemplo, não esqueçam de linkar a lib DBFCDX.LIB).
E aí? Qual foi o comportamento? Houve diferenças de comportamentos entre o NTX e o CDX?
Comigo não, só que o interessante... Eu consegui excluir o arquivo de índice que estava aberto, tanto o NTX quanto o CDX.
Lá no outro fórum, os testes de um dos caras se comportou como o meu; os testes de outro cara, comportou-se como o meu só nos índices CDX.
Segundo o cara que os testes se comportaram diferentes para NTX e CDX, afirmou que o arquivo de índice NTX não foi excluído (disse ele que deu o erro DOS de arquivo em uso).
Não esperava também estes resultados...
Se com vocês deu o mesmo resultado, seja no NTX, CDX ou ambos, alguém poderia me explicar porque?
E ainda, se o arquivo foi excluído, porque a indexação é mantida enquanto eu estiver com o programa em execução?
Lá acreditam estar na memória... Não sei não... Depois digo porque acho que não!
Aguardo e com muita curiosidade!!!