Página 1 de 1
indice ntx com chave de 2 campos
Enviado: 14 Nov 2008 20:57
por Tim9
A minha questão é bem primária, tenho até vergonha de perguntar, mas deu branco e preciso de ajuda.
1.Tenho um dbf que possui dois campos: cGrupo e cSubGrupo
2. Preciso criar um indice onde a chave seja cGrupo+cSubGrupo
3. Mas preciso pesquisar somente pelo cGrupo
Fiz assim:
DBCREATEIN("NOVOCOD", "cGrupo" + "cSubGrupo", {||CHAVE}, NIL)
Não lembro como fazer o DBseek(cGrupo).
Alguém pode me ajudar?
Só para ilustrar, nesse dbf de testes tenho:
cGrupo cSubgrupo
-------- ------------
1 2
1 1
Mas quero acessar o 1,1 primeiro.
Abraços.
Re: indice ntx com chave de 2 campos
Enviado: 14 Nov 2008 21:18
por Maligno
A chave de índice será realmente a soma das duas strings. Portanto, a chave será uma string comum. No SEEK a pesquisa poderá ser pela string completa ou não. No seu exemplo, se pesquisar por "1", inicialmente será encontrado "11", que representa o grupo e sub-grupo. Na seqüência, "12", "13", etc...
Re: indice ntx com chave de 2 campos
Enviado: 15 Nov 2008 12:12
por Tim9
Obrigado pela atenção Maligno,
A lógica do seu raciocínio entendí perfeitamente.
Só não estava conseguindo por em prática.
Pois da forma como apresentei o comando para criar o índice dá erro: Variável Chave não existe.
Então no parâmetro do bloco troquei CHAVE por cGrupo, aceita mas cria o índice errado.
Então, mudei o bloco para cGrupo, cSubGrupo. Aceita e cria o índice corretamente.
Agora faço o SEEK com uma string contendo o cGrupo que acredito vá resolver o meu problema.
Investí um bom tempo madrugada afora para encontrar a sintaxe completa do comando DBCREATEIN, encontrei várias, mas nenhuma cita a chave com mais de um campo, daí a minha solução na base da tentativa de erro e acerto.
Se alguém tiver ou indicar o link onde tem a sintaxe completa gostaria de dar uma olhada,
Mais uma vez obrigado.
Re: indice ntx com chave de 2 campos
Enviado: 15 Nov 2008 13:15
por alaminojunior
Tim, não sei qual o motivo que te levou a criar o índice desta forma, mas tente fazer do modo mais simples:
Index on campo to arquivo
ou
index on campo1+campo2 to arquivo
lembrando que precisam ter os mesmos tipos
Abrasssssss
Re: indice ntx com chave de 2 campos
Enviado: 15 Nov 2008 14:29
por Maligno
Tim9 escreveu:Se alguém tiver ou indicar o link onde tem a sintaxe completa gostaria de dar uma olhada
O melhor lugar para encontrar isso é no NG. Lá tem tudo o que você precisará.
Re: indice ntx com chave de 2 campos
Enviado: 15 Nov 2008 16:41
por rosalvo rosa
As vezes um detalhe pequeno nos foge e daí, não tem NG que dê jeito.
No comando DBSeek, sempre é bom lembrar que se vc estiver trabalhando com uma variável, precisará
usar o AllTrim(var), ou o Str(nvar,n). Nestes casos, fica assim :
DBSeek(Alltrim(var)) ou DBSeek(Str(nvar,n)).
Um abraço.
Re: indice ntx com chave de 2 campos
Enviado: 15 Nov 2008 19:10
por Maligno
Detalhes sutis, realmente. Mas, às vezes, detalhes como o que lembrou devem ser esquecidos.

No caso do nosso colega, tanto grupo quanto sub-grupo poderiam conter espaços à esquerda. O ideal seria ter zeros, mas não seria errado ter espaços. E se contiver espaços, AllTrim() pode fazer a pesquisa falhar ou retornar um registro errado.
Re: indice ntx com chave de 2 campos
Enviado: 15 Nov 2008 23:35
por Tim9
Muito obrigado a todos pela atenção.
Caso resolvido.
Aproveitei o código simples do Rosalvo e o Alltrim do Alamino e funcionou.
Mas quero agradecer também ao Maligno pelas dicas. Tentei ver no NG mas como formatei recentemente o HD, não estou achando nos meus bkps. Procurei no seu site para baixar mas também não encontrei. Vou continuar procurando pois me valho muito do NG na hora do aperto, de lembrar de uma sintaxe, etc.
Mais uma vez obrigado a todos.
Re: indice ntx com chave de 2 campos
Enviado: 16 Nov 2008 01:16
por Maligno
Tentei ver no NG mas como formatei recentemente o HD, não estou achando nos meus bkps. Procurei no seu site para baixar mas também não encontrei.
NGs:
http://pub.buzinello.com/index.php?d=./manuals/ng/
Leitor de NG (Windows):
http://pub.buzinello.com/tools/weg_expe ... 1.0.15.zip
Re: indice ntx com chave de 2 campos
Enviado: 16 Nov 2008 11:30
por Tim9
Valeu Maligno.
Muito obrigado.
Re: indice ntx com chave de 2 campos
Enviado: 19 Nov 2008 08:43
por rosalvo rosa
Detalhes sutis, realmente. Mas, às vezes, detalhes como o que lembrou devem ser esquecidos.
Acho que não hein...
Re: indice ntx com chave de 2 campos
Enviado: 19 Nov 2008 08:55
por Maligno
Para entender como isso é possível, basta seguir o exemplo que passei.

Re: indice ntx com chave de 2 campos
Enviado: 27 Nov 2008 23:42
por gvc
Vamos lá:
numped, C, 5
codpro, C, 6
Quando vc for procurar o primeiro item do pedido, deve lembrar que a variável contendo a chave deve respeitar os tamanhos dos campos originais.
Ex.
dbseek('00014') - Vai posicionar o ponteiro sobre o 1o. registro do pedido.
Se vc esta procurando um determinado produto no pedido, deverá lembrar dos tamanhos para montar a chave de pesquisa.
nnumped := '00014'
ccodpro := '010123'
Vai retornar verdadeiro se o pedido já tiver o produto cadastrado nos itens dele.
O principal é lembrar que a chave deverá respeitar os tamanhos dos campos que compõe a chave do indice, não importando de quantos campos é composta a chave.
Ah! Se vc usar parte da chave, por exemplo, procura pelo Nome, terá que truncar a chave de pesquisa.
nome, c, 40
dbseek('JOSE')
dbseek('JOSE VIT')