Indice CDX

Fórum sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

Jarbas
Usuário Nível 2
Usuário Nível 2
Mensagens: 82
Registrado em: 08 Dez 2005 17:48
Localização: Sao Paulo

Indice CDX

Mensagem por Jarbas »

Boa Tarde, alguem saberia me dizer pq isto nao funciona :
Ele so considera o ultimo indice

Request dbfcdx
rddsetdefault("DBFCDX")

USE Notas.Dbf ALIAS NOTA EXCLUSIVE NEW
FOR I:=1 TO 3
INDEX ON NUM_NOTA TAG I TO Notas.cdx
INDEX ON DTOS(DT_EMISSAO)+STR(NUM_NOTA,6) TAG I TO NOTAS.CDX
INDEX ON CGC_CPF+STR(NUM_NOTA,6) TAG I TO NOTAS.CDX
NEXT
ORDSETFOCUS("1")
LIST NUM_NOTA,CGC_CPF,DT_EMISSAO
INKEY(0)
ORDSETFOCUS("2")
LIST DT_EMISSAO,NUM_NOTA,CGC_CPF
INKEY(0)
ORDSETFOCUS("3")
LIST CGC_CPF,NUM_NOTA,DT_EMISSAO
CLOSE ALL
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: Indice CDX

Mensagem por gvc »

Jarbas escreveu:USE Notas.Dbf ALIAS NOTA EXCLUSIVE NEW
FOR I:=1 TO 3
INDEX ON NUM_NOTA TAG I TO Notas.cdx
INDEX ON DTOS(DT_EMISSAO)+STR(NUM_NOTA,6) TAG I TO NOTAS.CDX
INDEX ON CGC_CPF+STR(NUM_NOTA,6) TAG I TO NOTAS.CDX
NEXT
O correto seria:
INDEX ON NUM_NOTA TAG 1 TO Notas.cdx
INDEX ON DTOS(DT_EMISSAO)+STR(NUM_NOTA,6) TAG 2 TO NOTAS.CDX
INDEX ON CGC_CPF+STR(NUM_NOTA,6) TAG 3 TO NOTAS.CDX

Voce esta pondo o "FOR I" e esta criando 3 vezes o 3º tag com a mesma chave.
Faça o teste de mesa para verificar sua lógica.
Jarbas
Usuário Nível 2
Usuário Nível 2
Mensagens: 82
Registrado em: 08 Dez 2005 17:48
Localização: Sao Paulo

Mensagem por Jarbas »

Vc tem toda a razao, nao fui feliz no exemplo , uma tremenda orelhada, mudei o programa e ficou assim :
Agora o meu indice so fica no primeiro. pq ??


request dbfcdx
rddsetdefault("DBFCDX")

USE Notas.Dbf ALIAS NOTA EXCLUSIVE NEW
_ind:={"NUM_NOTA","DTOS(DT_EMISSAO)+STR(NUM_NOTA,6)","CGC_CPF+STR(NUM_NOTA,6)"}

FOR I:=1 TO 3
_campo:=_ind
INDEX ON (_campo) TAG I TO Notas.cdx
NEXT
ORDSETFOCUS("1")
LIST NUM_NOTA,CGC_CPF,DT_EMISSAO
INKEY(0)
ORDSETFOCUS("2")
LIST DT_EMISSAO,NUM_NOTA,CGC_CPF
INKEY(0)
ORDSETFOCUS("3")
LIST CGC_CPF,NUM_NOTA,DT_EMISSAO
CLOSE ALL

desde ja mto obrigado
Grings
Usuário Nível 3
Usuário Nível 3
Mensagens: 340
Registrado em: 18 Ago 2004 13:51

Mensagem por Grings »

Esquece o For, Next, faça como o colega escreveu, também não precisa TAG 1, TAG 2 e TAG 3, escreva somente TAG que os índices serão criados na ordem que voce escrever.
Jarbas
Usuário Nível 2
Usuário Nível 2
Mensagens: 82
Registrado em: 08 Dez 2005 17:48
Localização: Sao Paulo

Mensagem por Jarbas »

Amigo, nao posso esquecer o FOR NEXT, pois meu sistema armazena em vetor todos os arquivos utilizados e eu faco a abertura dos mesmos atraves de uma funcao . Estou tentando mudar de NTX p/ CDX e encontrei esse probleminha .
Responder