Um Breve Histórico:
A base de dados montada pela Fox (empresa que criou o FoxPro) foi tão bem sucedida, que a Microsoft comprou a Fox para obter a tecnologia dos índices RushMore para lançar a versão 2.0 do MS-Access.
O que são e como operam:
O arquivo DBF do Clipper é totalmente compatível com o DBF do FoxPro. Este último pode ter mais alguns tipos de dados, como o tipo Float (compatibilidade com o Dbase IV) e o Picture (para armazenar figuras). A diferença está nos índices.
O índice .IDX é similar ao .NTX, mas com a vantagem de ser bem mais rápido.
O .CDX tem a grande vantagem de ser um arquivo que suporta vários índices, sendo denominado de arquivo Bag. A vantagem está no seguinte: se vocês tem vários programas que acessam a mesma base de dados, e num determinado momento houve a necessidade de um programa criar mais uma chave de índice, sendo com o .CDX, todos os outros programas automaticamente estarão atualizando também esta chave, pois quando se abre um .CDX, todas as chaves contidas nele serão abertas. Outra vantagem é que os índices do FoxPro são compactados, gerando arquivos de tamanho muito reduzido. Para se ter uma idéia, alguns arquivos .CDX podem ficar até 90% menores que os seus relativos .NTX, e até 60% mais rápidos.
Uma vantagem também muito importante é que sendo os arquivos do FoxPro uma base de dados reconhecida pela grande maioria das linguagens, você pode migrar a sua base de dados com poucas mudanças no seu código Clipper, e ir desenvolvendo seu programa em Windows usando a mesma base de dados. Isto funciona, eu já testei o Clipper e o Visual Basic acessando ao mesmo tempo e dá certo. Com o Delphi (v4) tem que se ter o componente Halcyon, que possibilita trabalhar com índices de chave composta (Campo1+Campo2+Campo3), pois o driver nativo do Delphi só trabalha com chave simples.
Como trabalhar com estes arquivos:
Com um exemplo isso fica fácil:
| DBF / NTX |
|
Use DBF1 New Index On CAMPO1 To NTX1 Index On CAMPO2 To NTX2 Index On CAMPO3 To NTX3 Index On CAMPO4 To NTX4 Set Index To NTX1, NTX2, NTX3, NTX4 Set Order to 3 |
| DBF / CDX |
|
Use DBF1 New Index On CAMPO1 Tag Indice1 To CDX1 Index On CAMPO2 Tag Indice2 To CDX1 Index On CAMPO3 Tag Indice3 To CDX1 Index On CAMPO4 Tag Indice4 To CDX1 Set Index To CDX1 Set Order To Tag 'Indice3' ou Set Order To 3 |
| DBF / IDX (note que fica igual ao NTX) |
|
Use DBF1 New Index On CAMPO1 To IDX1 Index On CAMPO2 To IDX2 Index On CAMPO3 To IDX3 Index On CAMPO4 To IDX4 Set Index To IDX1, IDX2, IDX3, IDX4 Set Order to 3 |
Com o exemplo acima dá para ver que não muda quase nada, a não ser o modo de como criar os índices. O que muda é para melhor, a chave pode ter um apelido, definido pelo TAG. Assim uma chave pode ser acessada pelo seu apelido, tornando o fonte mais nítido.
Como habilitar estes índices para o Clipper os reconhecer:
Junto a versão 5.2x do Clipper vem a DBFCDX.LIB que disponibiliza a utilização dos índices do FoxPro. Mas há dois defeitos nesta Lib:
Estes dois problemas são resolvidos pela "SIx Driver RDD", que é um driver desenvolvido pela SuccessWare. E o melhor sem mexer no fonte, isto é, se você já utilizava a DBFCDX, não precisa mudar nada, basta apenas linkar outra vez.
Usando a DBFCDX fica assim:
BLINKER FI menuprog LIB DBFCDX OUT menuexec
Usando a SixDriver fica assim:
DbSetDriver( 'SIXCDX' )
BLINKER FI menuprog, SIXCDX @SIX2 OUT menuexec
Obs.: O SIX2.LNK é fornecido no pacote SixDriver
Agora é só usufruir da velocidade e consistência dos arquivos do FoxPro.
Dica enviada por Alessandro Duarte de Moraes