Clipper On Line • Ver Tópico - Indexando CDX e gera IDX
Mudar para estilo Clássico
Discussão sobre a linguagem CA-Clipper.
Postar uma resposta

Indexando CDX e gera IDX

07 Jan 2009 23:10

Olá amigos!

Estou tentando indexar CDX e o comando index só cria INX

Coloquei no inicio do sistema mae o "request dbfcdx" e rddsetdafault("dbfcdx").

Abaixo a rotina:
Código:
      FOR t=1 TO LEN(sistema[i,O_INDIC])                 // para cada indice do subsistema
         ntx=sistema[i,O_ARQUI,O_DIR_NTX]+sistema[i,O_INDIC,t]       // obtem nome do indice
         IF !FILE(ntx+EXTENSAO()).OR.harq                // se nao existir ou criou estrutura
            POE_GAUGE(ntx+EXTENSAO(),"CRIANDO")          // vamos criar...

            #ifdef COM_REDE
               IF !USEARQ(dbf,.t.,20,1,.f.)              // tenta abrir arquivo modo exclusivo
                  SETPOS(23,1)
                  RETU (.f.)                             // retorna .f., pois nao conseguiu
               ENDIF
            #else
               USEARQ(dbf,,,,.f.)                        // abre arquivo e indexa
            #ENDIF
            INDE ON &(sistema[i,O_CHAVE,t]) TO (ntx) EVAL POE_GAUGE() EVERY (LASTREC()/20)
            RESTSCR(0,0,MAXROW(),79,tel_a)               // restaura tela
         ENDIF
      NEXT

Desde já agradeço a ajuda.

Re: Indexando CDX e gera IDX

08 Jan 2009 00:54

Vi em outro post que o comando TAG cria vários índices em um só arquivo e sem ele é criado os índices IDX.

Se usarmos o TAG teremos algum ganho de performance? ele é melhor?

Re: Indexando CDX e gera IDX

08 Jan 2009 06:37

Para indexar com CDX ficaria mais pratico ou seja para cada tabela DBF você passa a ter somente um arquivo CDX, ex:

Index on codigo tag cod01 to arquvo
index on nome tag nom01 to arquivo
index on dtos(data) tag dat01 to arquivo

Com este exemplo você acaba de cria três indice e apenas um ARQUIVO.CDX

Re: Indexando CDX e gera IDX

08 Jan 2009 16:29

Em dicas http://www.pctoledo.com.br/col_dic.htm

Testo da dica

O RDD DBFCDX

Esse RDD permite a criação e manutenção de arquivos de dados e índices do FoxPro2.

Principais características:

Os índices .CDX do FoxPro 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:

REQUEST DBFCDX
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:

RTLINK FI teste LIB DBFCDX

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.

Elimine os arquivos de índices antingos antes de reindexar.

Vander
Editado pela última vez por Vander em 08 Jan 2009 21:30, num total de 1 vezes

Re: Indexando CDX e gera IDX

08 Jan 2009 16:47

Clodoaldo,

Quando fiz um programa utilizando Clipper 5.2, realmente meus índices utilizando RDDCDX, eram criados com extesão IDX, assim como está acontecendo contigo.

Assim que atualizei o clipper para 5.2e, os arquivos ficaram com a extensão CDX mesmo.

As TAGs são necessárias para gerar os índices utilizando RDD CDX.

Eu faço da seguinte forma:

Exemplo, um arquivo CLIENTE.DBF, com a seguinte estrutura:

CODIGO, C, 5
NOME, C, 40
ENDERECO, C, 40
TELEFONE, C, 14

Quero criar dois índices, para o campo código e para o campo nome, então, faço assim:

USE CLIENTE
INDEX ON CODIGO TAG CLI001 TO CLIENTE
INDEX ON NOME TAG CLI002 TO CLIENTE
SET INDEX TO CLIENTE

Assim, terei dois arquivos. Um CLIENTE.DBF, que será a tabela dos clientes cadastrados. E o CLIENTE.CDX, onde terei as tags CLI001, CLI002, que definirão as chaves da tabela CLIENTE.DBF.

Aí, pra mudar a ordem, é só fazer:

SET ORDER TO 1 (aciona a tag CLI001 = ordem por codigo)
SET ORDER TO 2 (aciona a tag CLI002 = ordem por nome)

Observação:
Para indexar usando RDD CDX, vc não pode esquecer antes de deletar os arquivos CDX, caso contrário, o comando INDEX ON vai apenas adicionar mais chaves de índice dentro do CDX, ao invés de recriá-las.

A maioria aconselha a usar ORDSETFOCUS(), mas eu uso SET ORDER TO mesmo, e nunca tive problemas. E tbem não há problema algum em o arquivo de índice (CDX) ter o mesmo nome do arquivo de tabela (DBF).

Maickon Sato

Re: Indexando CDX e gera IDX

08 Jan 2009 17:12

IDX e CDX pertencem à RDD CDX são essencialmente a mesma coisa:
. sem as TAGs, a RDD CDX cria arquivos IDX, com UM indice por arquivo (como a RDD NTX faz)
. com as TAGs, a RDD CDX cria arquivos CDX, com TODOS os indices em um só arquivo.

Aliás, eu até hoje não entendi o porquê da RDD CDX ter os dois modos. Se ambos têm capacidades iguais, pra que usar o IDX, que gasta mais file handles e nomes de arquivo?

Re: Indexando CDX e gera IDX

08 Jun 2009 23:04

Boa noite,

Eu Tb estou na empresa de cambiar de NTX para CDX.

Vander
- Acrescente as linhas abaixo no início do seu programa principal:
REQUEST DBFCDX
RDDSETDEFAULT("DBFCDX")


Já fiz isso e tira erro quando está compilando:
DBFCDX unresolved external

Aguardo sua colaboração, muito obrigado

Re: Indexando CDX e gera IDX

09 Jun 2009 00:03

Adalberto, o erro acontece mesmo linkando a DBFCDX.LIB junto?

4 - Para linkar um programa com o RDD DBFCDX, deve ser acrescentada a LIB DBFCDX durante o processo de linkagem:

RTLINK FI teste LIB DBFCDX


Ate+,

Re: Indexando CDX e gera IDX

09 Jun 2009 17:22

Andril

Eliminei essa mensagem de erro acrescentando _DBFCDX.LIB agora estou querendo saber como se abre um arquivo CDX; muito obrigado pela ajuda.

Um grande abraço.
Postar uma resposta