Página 1 de 2

Pesquisa do mesmo dado em vários registros.

Enviado: 24 Set 2007 17:25
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

Enviado: 25 Set 2007 07:49
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.

Enviado: 25 Set 2007 08:52
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

Enviado: 25 Set 2007 09:00
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)..."

Enviado: 25 Set 2007 09:29
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.

Enviado: 25 Set 2007 09:56
por Eolo
Putz, esqueci mesmo!... :-(
Bem observado.

Pesquisa do mesmo dado em vários registros.

Enviado: 25 Set 2007 09:58
por Bisteca
Obrigado, ja fiz com o locate, porém ele fica num loop infinito.
Será que fiz algo errado?

Enviado: 25 Set 2007 10:13
por Maligno
Mostra o código pra gente ver o que está acontecendo.

Enviado: 25 Set 2007 18:33
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 é ?

Enviado: 25 Set 2007 18:41
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.

Enviado: 25 Set 2007 19:10
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.

Enviado: 25 Set 2007 19:32
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. :)

Enviado: 25 Set 2007 19:50
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.

Enviado: 25 Set 2007 19:59
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.

Enviado: 25 Set 2007 20:01
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. :)