Busca em Campo Relacionado.

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Busca em Campo Relacionado.

Mensagem por Marcos »

Olá a todos do fórum,
Há tempos atras fiz uma pergunta aqui sobre este assunto mas não obtive respostas.
Como fazer uma busca num registro pelo campo que está relacionado a outro DBF?
Digamos que no DBF Contas a Receber eu tenho o Código do Cliente, onde no DBEDIT usando o Set Relation eu monto mostrando o Nome do Cliente, até aí blz, agora pergunto, como fazer uma pesquisa com Seek no DBEDIT de Conta a Receber pelo Nome do Cliente?
Abraços,
Marcos.
Atenciosamente,
_____________________________
Marcos Antonio da Silva
marcosilva90@hotmail.com
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Olá,

Deixa eu ver se entendi direito...

Você relacionou o campo "CODIGO_CLIENTE" do dbf de Clientes com o um outro de mesmo conteúdo no dbf de Contas a Receber usando SET RELATION... é isso?

Então voce quer pesquisar pelo NOME do cliente...

Selecione o Arq de clientes pesquise o nome e depois volte ao arquivo de Contas e pesquise o código do cliente, mais ou menos assim:

Código: Selecionar todos


select CLIENTES 
set index to IND_NOME 

dbGoTop()

seek variavel_Nome

if found()
   select CONTAS
   seek CLIENTES->campo_CODIGO  // Neste momento o pointer ja está posicionado no registro do cliente
else
   alert("Nome nao encontrado")
   select CONTAS
endif


Note que o fato de ter sido encontrado o Nome do Cliente no primeiro seek não implica que o código dele exista no arquivo de Contas e portanto é necessário testar de novo com FOUND() no segundo SEEK.

Note também que pode existir mais de uma vez o código do cliente no arquivo de Contas e que portanto poderia ser mais útil usar a função LOCATE...CONTINUE, ou até mesmo filtrar o arquivo de contas para exibir apenas as Contas deste cliente...


Espero ter ajudado
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar do usuário
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Mensagem por Marcos »

Obrigado Stanis Luksys pela ajuda, funcionou blz, o único problema é que quando o registro é encontrado o Campo que está relacionado no caso o Nome do Cliente some do DBEDIT, ou seja, o registro é encontrado pelo cursor que fica em cima do registro, mas o nome que é o Campo que está relacionado some.
Abraços,
Marcos.
Atenciosamente,
_____________________________
Marcos Antonio da Silva
marcosilva90@hotmail.com
Avatar do usuário
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Mensagem por Marcos »

Alguém poderia me dar uma força, estou precisando des Função para atualizar no Cliente.
Abraços, e boa semana a Todos.
Marcos.
Atenciosamente,
_____________________________
Marcos Antonio da Silva
marcosilva90@hotmail.com
Avatar do usuário
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Mensagem por Marcos »

Pessoal desculpe ser insistente é que estou precisando urgente da Função, ao buscar o registro usando o Seek o campo que está relacionado está sumindo, já lutei para arrumar e não consegui, peço novamente a ajuda, estou realmente precisando. :(
Marcos
Atenciosamente,
_____________________________
Marcos Antonio da Silva
marcosilva90@hotmail.com
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Ok,

Acho que só está faltando voce colocar um RETURN(2) na UDF que controla o dbEdit().

Att
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar do usuário
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Mensagem por Marcos »

Eu já coloquei este Return(2) em todos os possiveis lugares e nada!
Atenciosamente,
_____________________________
Marcos Antonio da Silva
marcosilva90@hotmail.com
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Ok,

Tente salvando o numero do registro numa variavel, depois vc abandona a execucao do dbEdit, e abre de novo e dé um dbGoTo(var).

Não é uma gde solução mas... uma gambiarra de vez em qdo não faz a mal a ninguém...

Att,
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Responder