indice ntx com chave de 2 campos
Moderador: Moderadores
- Tim9
- 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
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.
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
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
Re: indice ntx com chave de 2 campos
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!
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!
- Tim9
- 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
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.
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
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
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
Re: indice ntx com chave de 2 campos
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
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
MySQL c/ SQLRDD
HwGui + GTWVG
Re: indice ntx com chave de 2 campos
O melhor lugar para encontrar isso é no NG. Lá tem tudo o que você precisará.Tim9 escreveu:Se alguém tiver ou indicar o link onde tem a sintaxe completa gostaria de dar uma olhada
[]'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!
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!
- rosalvo rosa
- 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
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.
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
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.
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!
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!
- Tim9
- 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
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.
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
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
Re: indice ntx com chave de 2 campos
NGs: http://pub.buzinello.com/index.php?d=./manuals/ng/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.
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!
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!
- Tim9
- 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
Valeu Maligno.
Muito obrigado.
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
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
- rosalvo rosa
- 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
Acho que não hein...Detalhes sutis, realmente. Mas, às vezes, detalhes como o que lembrou devem ser esquecidos.
Re: indice ntx com chave de 2 campos
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!
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!
Re: indice ntx com chave de 2 campos
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')
numped, C, 5
codpro, C, 6
Código: Selecionar todos
index on numped + codpro to it_peddEx.
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)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}
{POG - Programação Orientada a Gambiarra}
