Pesquisa do mesmo dado em vários registros.

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Bisteca
Usuário Nível 2
Usuário Nível 2
Mensagens: 74
Registrado em: 10 Jan 2005 10:25

Pesquisa do mesmo dado em vários registros.

Mensagem por Bisteca »

Olá amigos escovadores de bits.
Preciso pesquisar o numero de um lacre, mas esse numero pode estar em varios registros, até aí tudo bem. O prolema é que ele pode estar em até seis campos diferentes, são eles:
lacre retirado 1
lacre retirado 2
lacre retirado 3
lacre colocado 1
lacre colocado 2
lacre colocado 4
Aí preciso exibir somente em quais registros (não o campo) o numero aparece.

Obrigado
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Caro colega,

Seria bom listar e dar exemplos do seu BD. Para isso faça uso dos seguintes procedimentos para listar estrutura em arquivo e gerar arquivo texto com alguns registros como exemplo do seu BD.

Veja aqui: https://pctoledo.org/forum/viewtopic.php?t=6616

Assim saberei como exemplificar melhor o seu caso.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem por Eolo »

Bisteca, duas opções:

Código: Selecionar todos

* LOCATE (mais demorado)
* dependendo do tamanho do arquivo
procura="1234" // lacre a localizar
locate for procura$(lacreR1+lacreR2+lacreR3+lacreC1+lacreC2+lacreC3)
do whil .t.
  if !found()
    exit
  endi
  ?recno() // mostra número do registro
  cont
endd

Código: Selecionar todos

* SEEK
* Neste caso, vc precisa indexar
* cada um dos 6 campos onde o lacre aparece.
* Ex.: lacreR1 = index1, lacreR2 = index2 etc. 
procura="1234" // lacre a localizar
for ordem=1 to 6
  set orde to ordem
  seek procura
  do whil .t.
    if !procura==lacre
      exit
    endi
    ?recno() // mostra número do registro
    skip
  endd
next
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem por Eolo »

procura="1234" // lacre a localizar
locate for procura$(lacreR1+lacreR2+lacreR3+lacreC1+lacreC2+lacreC3)
Ah, eu imaginei que os campos (LACRER1, LACRER2 etc) fossem CARACTER e com tamanho 4. Se eles forem numéricos, é só transformar em caracter antes de concatenar:
"locate for procura$(str(lacreR1)+str(lacreR2)..."
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Neste caso, Eolo, você esqueceu de acrescentar um caractere qualquer (asterisco, por exemplo) entre os números, para evitar coincidências. Exemplo: "234*534*756*343". Sem o asterisco, ele poderia procurar pelo número 634 nessa string e acabaria encontrando, o que seria um erro.
[]'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
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem por Eolo »

Putz, esqueci mesmo!... :-(
Bem observado.
Avatar do usuário
Bisteca
Usuário Nível 2
Usuário Nível 2
Mensagens: 74
Registrado em: 10 Jan 2005 10:25

Pesquisa do mesmo dado em vários registros.

Mensagem por Bisteca »

Obrigado, ja fiz com o locate, porém ele fica num loop infinito.
Será que fiz algo errado?
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Mostra o código pra gente ver o que está acontecendo.
[]'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
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Por isso que eu farei a minha indicação quando maiores informações venham a seemr conhecidas (como estrutura de dados e exemplos de conteúdo de dados). Caso contrário muitas sugestões podem vir a cair em meras congeturas que na minha opinião são extremamente desgastantes porque é muito dificil adivinhar o que os colegas almejam. E acaba sempre num debate extenso e sem objetivo. Mas enfim cada um faz o que quer, não é ?
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Pois é. Entendo seu ponto de vista. Muitas vezes dá pra matar o problema sabendo apenas quais os sintomas. Às vezes, por "chute", até dá pra resolver, o que realmente pode levar a thread a crescer demais, desncessariamente. Mas tem vezes que só vendo o "paciente" pra dizer algo mais preciso.
[]'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
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem por Eolo »

...muitas sugestões podem vir a cair em meras congeturas que na minha opinião são extremamente desgastantes porque é muito dificil adivinhar ...
Pablo, desculpe mas não entendi o que vc falou. Como é? "Mera conjectura"? "Adivinhar"?

Pergunta específica do Bisteca: ele tem um número (de um lacre), que pode estar em varios registros, dentro de até 6 campos. Ele quer descobrir em que registros esse tal número está. Pergunta mais direta impossível. Não precisa "adivinhar" nada. Tá lá escrito.

E aí a minha resposta foi uma adivinhação? Uma conjectura?

Explica pra mim, porque não entendi a sua posição. Aliás, o seu post só serviu pra causar uma resposta do Maligno e uma minha. Não acrescentou nada ao problema do Bisteca.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Bisteca escreveu:ja fiz com o locate, porém ele fica num loop infinito.
Será que fiz algo errado?
Acho que ele estava se referindo a essa frase, Éolo. Aliás, ele não reclamou do Bisteca, nem fez uma crítica direta. Nada disso. Acredito que ele apenas quis desabafar sobre algo que é muito comum no fórum: a falta de objetividade das perguntas. É como se você dissesse "meu código não funciona" mas sem se lembrar de mostrar tal código. Também não faço crítica quanto a isso. A gente sabe que as vezes o sujeito fica tão entretido com o erro que posta o pedido de ajuda e se esquece do básico. :)
[]'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
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Eolo escreveu:Pablo, desculpe mas não entendi o que vc falou. Como é? "Mera conjectura"? "Adivinhar"?
Sim isso mesmo, peço desculpas por ter escrito errado (o correto é conjetura e não conegtura como eu tinha escrito), mas ao final muitos escrevem errado e não é destacado nada.
Eolo escreveu:Pergunta específica do Bisteca: ele tem um número (de um lacre), que pode estar em varios registros, dentro de até 6 campos. Ele quer descobrir em que registros esse tal número está. Pergunta mais direta impossível. Não precisa "adivinhar" nada. Tá lá escrito.
Bem pode até se supor que tal número do lacre aparecerá em vários registros e não foi dito que pode estar e mais do que um campo também. outra questão é saber se o número do lacre está armazenado em forma numérica ou do tipo caracter (parece ser numérica (e aí pode estar o problema para encontra-lo, se não for feito o tratamento adequado).
Eolo escreveu:E aí a minha resposta foi uma adivinhação? Uma conjectura?
Pra mim houve dedução ou adivinhação como você queira chamar... mas enfim colega, não precisa ficar bravinho... O importante que se resolveu, beleza (ou não parece haver furos de info) então parece que o seu entendimento foi maior que o meu neste caso. Então parabéns, não precisa se irritar. Eu ao fazer a minha insição neste caso não esperava ter te causado transtorno algum.
Eolo escreveu:Explica pra mim, porque não entendi a sua posição. Aliás, o seu post só serviu pra causar uma resposta do Maligno e uma minha. Não acrescentou nada ao problema do Bisteca.
Eu percebí que não houveram respostas desde a postagem do "bisteca" até hoje de manhã e ainda que eu tenha sido o primeiro a atender ao colega outros puderam entender a questão. Eu simplesmente quis ressaltar a importância de expor alguns dados (como estrutura e exemplos de contéudo dos campos em questão), tal é assim que o colega Maligno entendeu a minha colocação e acredito que ele não se sintiu ofendido.

Desculpa colega "Bisteca" se parece que eu não queira te ajudar, acho que pedir mais info não tira pedaços e além do mais obter com precisão respostas adequadas deve ser feito com maiores dados. Mas enfim essa é a minha colocação como disseram as vezes pelo sintoma dá diagnoticar. Não me leve a mal estarei disponivel caso seja necessário.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Maligno escreveu:Aliás, ele não reclamou do Bisteca, nem fez uma crítica direta. Nada disso. Acredito que ele apenas quis desabafar sobre algo que é muito comum no fórum: a falta de objetividade das perguntas.
Bem Maligno ! Você é uma pessoa muito bem informada. Acho que o colega Eolo se sintiu ofendido por algo sem ter visto a postagem sobre o tema. Mas não estou criticando ninguém. Acho tão somente que as vezes vale a pena esperar por maiores info do autor e desta forma evitar inúmeras indicações que claro não sempre servem todas. Mas também é válido cada um postar a sua opinião também (eu acho que também tenho esse direito) sempre e quando sem fazer ofensas.

Obrigado pela compressão.
Editado pela última vez por Pablo César em 25 Set 2007 20:02, em um total de 1 vez.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

As palavras escritas tem peso e emoção diferentes das palavras faladas. Às vezes lemos algo que nos faz crer em algo diferente. E a pessoa apenas escreveu de forma diferente do que seria se falasse. Aí começa a confusão e nos vemos ofendidos sem que a real intenção fosse essa. Portanto, calma pessoal. :)
[]'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!
Responder