Clipper On Line • Ver Tópico - Indexando CDX e gera IDX

Indexando CDX e gera IDX

Discussão sobre a linguagem CA-Clipper.

Moderador: Moderadores

 

Indexando CDX e gera IDX

Mensagempor clodoaldomonteiro » 08 Jan 2009 00: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:
      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.
At. Clodoaldo Monteiro
GASPRO - xHrabour - xDev Studio - Delphi - Contabilidade Pública - Folha de Pagamento - ISS, IPTU
Fones: (86)3223-0653, 9992-0236
www.simplesinformatica.com
Avatar de usuário

clodoaldomonteiro
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 455
Data de registro: 30 Dez 2006 13:17
Cidade/Estado: Teresina-PI
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Re: Indexando CDX e gera IDX

Mensagempor clodoaldomonteiro » 08 Jan 2009 01: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?
At. Clodoaldo Monteiro
GASPRO - xHrabour - xDev Studio - Delphi - Contabilidade Pública - Folha de Pagamento - ISS, IPTU
Fones: (86)3223-0653, 9992-0236
www.simplesinformatica.com
Avatar de usuário

clodoaldomonteiro
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 455
Data de registro: 30 Dez 2006 13:17
Cidade/Estado: Teresina-PI
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Re: Indexando CDX e gera IDX

Mensagempor infosys2 » 08 Jan 2009 07: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
Clipper, xHarbour, gtwvw, wvwtools, fivewin
infosys2
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 23
Data de registro: 10 Out 2008 07:36
Cidade/Estado: Sao Pulo
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Re: Indexando CDX e gera IDX

Mensagempor Vander » 08 Jan 2009 17: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 22:30, num total de 1 vezes
HbMake v1.17
xHarbour build 0.99.70 Intl. (SimpLex)
Borland C++ 5.5.1
fivewin 6.12 (FREE)
Workshop 4.5
MEdit
Avatar de usuário

Vander
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 176
Data de registro: 23 Jul 2004 02:43
Cidade/Estado: João Monlevade - MG
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Re: Indexando CDX e gera IDX

Mensagempor acelconsultoria » 08 Jan 2009 17: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
Adm. Maickon Sato
Acel Consultoria e Projetos
-------------------------------------------------------
Avatar de usuário

acelconsultoria
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 155
Data de registro: 10 Jan 2006 17:05
Cidade/Estado: Itápolis-SP
Curtiu: 1 vez
Mens.Curtidas: 0 vez

Re: Indexando CDX e gera IDX

Mensagempor Eolo » 08 Jan 2009 18: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?
Avatar de usuário

Eolo
Colaborador

Colaborador
 
Mensagens: 990
Data de registro: 08 Dez 2005 18:24
Cidade/Estado: Osasco - SP
Curtiu: 0 vez
Mens.Curtidas: 5 vezes

Re: Indexando CDX e gera IDX

Mensagempor Adalberto » 09 Jun 2009 00: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
Adalberto
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 262
Data de registro: 01 Set 2007 02:09
Cidade/Estado: Santa Cruz de la Sierra - Bolivia
Curtiu: 0 vez
Mens.Curtidas: 6 vezes

Re: Indexando CDX e gera IDX

Mensagempor ANDRIL » 09 Jun 2009 01: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+,
Clipper 5.2e / Blinker 5.1 / xHarbour 1.0.0 Simplex / HwGUI 2.16
-----------------------------------------------------------------------------
Visitem http://www.nsi-sp.com
Avatar de usuário

ANDRIL
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 754
Data de registro: 06 Jul 2004 01:44
Curtiu: 0 vez
Mens.Curtidas: 3 vezes

Re: Indexando CDX e gera IDX

Mensagempor Adalberto » 09 Jun 2009 18: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.
Adalberto
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 262
Data de registro: 01 Set 2007 02:09
Cidade/Estado: Santa Cruz de la Sierra - Bolivia
Curtiu: 0 vez
Mens.Curtidas: 6 vezes




Retornar para CA-Clipper

Quem está online

Usuários vendo este fórum: Bing [Bot] e 1 visitante


Faça uma doação para o forum
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro