indice ntx com chave de 2 campos

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Tim9
Usuário Nível 3
Usuário Nível 3
Mensagens: 154
Registrado em: 14 Ago 2003 15:18
Localização: Ribeirão Preto
Contato:

indice ntx com chave de 2 campos

Mensagem 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.
Até Breve!
Luz e Paz!
Tim9
------------------------------------------
olynthes@gmail.com
** Somos livres para escolher, mas prisioneiros das conseqüências **
------------------------------------------
Uso Clipper 5.2e, Blinker 7.0, Prwin 1.0 BFNTX migrando p/ xHarbour e Hwgui Dbfcdx
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: indice ntx com chave de 2 campos

Mensagem 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...
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Tim9
Usuário Nível 3
Usuário Nível 3
Mensagens: 154
Registrado em: 14 Ago 2003 15:18
Localização: Ribeirão Preto
Contato:

Re: indice ntx com chave de 2 campos

Mensagem 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.
Até Breve!
Luz e Paz!
Tim9
------------------------------------------
olynthes@gmail.com
** Somos livres para escolher, mas prisioneiros das conseqüências **
------------------------------------------
Uso Clipper 5.2e, Blinker 7.0, Prwin 1.0 BFNTX migrando p/ xHarbour e Hwgui Dbfcdx
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: indice ntx com chave de 2 campos

Mensagem 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
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: indice ntx com chave de 2 campos

Mensagem 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á.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
rosalvo rosa
Usuário Nível 3
Usuário Nível 3
Mensagens: 156
Registrado em: 10 Jan 2006 19:21
Localização: Curitiba - PR

Re: indice ntx com chave de 2 campos

Mensagem 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.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: indice ntx com chave de 2 campos

Mensagem 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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Tim9
Usuário Nível 3
Usuário Nível 3
Mensagens: 154
Registrado em: 14 Ago 2003 15:18
Localização: Ribeirão Preto
Contato:

Re: indice ntx com chave de 2 campos

Mensagem 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.
Até Breve!
Luz e Paz!
Tim9
------------------------------------------
olynthes@gmail.com
** Somos livres para escolher, mas prisioneiros das conseqüências **
------------------------------------------
Uso Clipper 5.2e, Blinker 7.0, Prwin 1.0 BFNTX migrando p/ xHarbour e Hwgui Dbfcdx
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: indice ntx com chave de 2 campos

Mensagem 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
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Tim9
Usuário Nível 3
Usuário Nível 3
Mensagens: 154
Registrado em: 14 Ago 2003 15:18
Localização: Ribeirão Preto
Contato:

Re: indice ntx com chave de 2 campos

Mensagem por Tim9 »

Valeu Maligno.

Muito obrigado.
Até Breve!
Luz e Paz!
Tim9
------------------------------------------
olynthes@gmail.com
** Somos livres para escolher, mas prisioneiros das conseqüências **
------------------------------------------
Uso Clipper 5.2e, Blinker 7.0, Prwin 1.0 BFNTX migrando p/ xHarbour e Hwgui Dbfcdx
Avatar do usuário
rosalvo rosa
Usuário Nível 3
Usuário Nível 3
Mensagens: 156
Registrado em: 10 Jan 2006 19:21
Localização: Curitiba - PR

Re: indice ntx com chave de 2 campos

Mensagem por rosalvo rosa »

Detalhes sutis, realmente. Mas, às vezes, detalhes como o que lembrou devem ser esquecidos.
Acho que não hein...
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: indice ntx com chave de 2 campos

Mensagem por Maligno »

Para entender como isso é possível, basta seguir o exemplo que passei. :)
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: indice ntx com chave de 2 campos

Mensagem por gvc »

Vamos lá:

numped, C, 5
codpro, C, 6

Código: Selecionar todos

index on numped + codpro to it_pedd
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'

Código: Selecionar todos

dbseek(nnumped + ccodpro)
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')
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Responder