ASCAN()

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

ASCAN()

Mensagem por marcos.gurupi »

Caros, tenho q imprimir um relatorio que filtre uma determinada palavra no banco de dados, ou seja, no campo OCORRENCIA01 c houver "DEPOSITO" .OR. "DEPOS" ele devera entrar no relatorio, entaum estou usando assim:

ASCAN(campo,"DEPOSITO")


Acontece que o ASCAN estah sempre me retornando 0 quando existe campos com essa palavra (DEPOSITO).

O q estah errado no comando?

Marcos Roberto
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 »

O comando ASCAN é utilizado para busca em VETORES não em campos de um DBF.
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 »

Tome cuidado se este campo OCORRENCIA01, for digitado pelo usuário. Pois esse procedimento então, está sujeito a erros. É preferível ser assignado através de um menú onde não permita outra nomenclatura. Desta forma gravaria de forma FIXA e que poderá ser feito indexação nesse campo.

Daí então em lugar de usar ASCAN utilize o SEEK. O LOCATE também poderá servir, mas é desaconselhável quando for previsto uma quantidade muito grande de registros.
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 »

Adicionalmente à palavra do Pablo, aconselho o uso das funções AT() ou RAt() para a busca das palavras contidas no campo. Leia o NG para mais detalhes.
[]'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
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

Acho que no tópico vc vai encontrar o que precisa.
https://pctoledo.org/forum/viewto ... t=leonardo

Jânio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
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 »

A solução indicada do Janio de fazer uso do AADD, isto é, colocando em vetores, também é uma saída. Aí sim utilizaria-se o ASCAN(). Mas acredito que esta opção poderá ser comprometida se depender da quantidade de registros e excedendo a memória da máquina.

No entanto a velocidade de procura de strings em memória é mais rápida que em disco, depnderá da quantidade de registros para optar entre uma solução e outra. Não tendo como prever, eu sou mais a procura em disco.
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 »

O exemplo postado pelo Eolo, utilizando WildSeek, também pode ser aplicado com a SIX no Clipper. É só o caso de indexar pelo campo alvo e usar a função sx_WildSeek(). Funciona do mesmo jeito: muito rápido. Em alguns casos, instantâneo. Claro que, dependendo da finalidade, etc.., não compense ou não seja necessário.
[]'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
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

Pablo,

Além do Aadd, me refiro também a função ordwildseek que consta no tópico que indiquei.

Tipo, pode ser feito:
do while ordwildseek("*DEPOSITO*",.t.)

... relatório
...
...

endd

Mas acho que deve haver um INDICE ativo com o campo OCORRENCIA01.

Jânio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
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 »

Mas acho que deve haver um INDICE ativo com o campo OCORRENCIA01.
Sem dúvida.
[]'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 »

Ahh sim, mas pelo que tudo indica esse campo OCORRENCIA01, deve ser para identificar o lançamento de cada registro e se houver a necessiidade de FILTRAR ou separar tais registros, talvez a indexação seria o mais indicado. Só caberia tratar a entrada no campo, no caso. Mas são suposições minhas ainda não sabemos mais sobre o por quê o colega utilizaria o ASCAN. Espero eu não ter me precipitado com a minha conclusã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
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

Se vc colocar:

<var1> $ <var2>

será retornado .T. se <var1> existir dentro de <var2>

? 'A' $ 'COMPARANDO STRINGS' // retorna .T.
? 'ST' $ 'COMPARANDO STRINGS' // retorna .T.
? 'ando' $ 'COMPARANDO STRINGS' // retorna .F.
? 'ANDO' $ 'COMPARANDO STRINGS' // retorna .T.
? 'B' $ 'COMPARANDO STRINGS' // retorna .F.

O AT() ou RAT() retorna um número indicando a posição da ocorrência e o "$" retorna se existe ou não.

Espero ter ajudado. Boa sorte.
Editado pela última vez por gvc em 18 Fev 2008 18:22, em um total de 1 vez.
"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}
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 »

A solução ideal depende do problema. Mas como resolvê-lo sem sabê-lo?
[]'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