Page 1 of 1

buscar la coincidencia en toda la cadena

PostPosted: Tue Jan 24, 2017 12:30 am
by artu01
Gente
el dbseek busca a partir del comienzo la coincidencia, se puede buscar la coincidencia dentro de toda la cadena a buscar?
similar a cuando se busca por nombre en los contactos del celular


Gracias

Re: buscar la coincidencia en toda la cadena

PostPosted: Tue Jan 24, 2017 12:57 am
by Sistem
artu01
con xbrowse yo uso asi:
oLbx:lIncrFilter := .t.
oLbx:lSeekWild := .t.

@ 1, 1 SAY oLbx:oSeek PROMPT oLbx:cSeek PICTURE "@!" UPDATE OF oDlg PIXEL COLOR CLR_BLACK FONT oFont SIZE 220, 22 BORDER

Re: buscar la coincidencia en toda la cadena

PostPosted: Tue Jan 24, 2017 5:56 am
by joseluisysturiz
Creo esto te serviria, saludos... :shock:

AT()
Devuelve la posición de una subcadena dentro de una cadena de caracteres
------------------------------------------------------------------------------
Sintaxis

AT(<cBúsqueda>, <cDestino>) --> nPosición

Argumentos

<cBúsqueda> es la subcadena de caracteres que se va a buscar.

<cDestino> es la cadena de caracteres en la que se realiza la
búsqueda.

Devuelve

AT() devuelve la posición de la primera aparición de <cBúsqueda> dentro
de <cDestino>, como valor numérico entero. Si no se encuentra
<cBúsqueda>, AT() devuelve cero.

Descripción

AT() es una función de tratamiento de caracteres que se utiliza para
determinar la posición de la primera aparición de una subcadena dentro
de otra cadena. Si sólo necesita saber si una subcadena se encuentra
dentro de otra, utilice el operador $. Para encontrar la última
aparición de una cadena dentro de otra, utilice RAT().

Ejemplos

C Los ejemplos siguientes muestran la utilización normal de AT():

? AT("a", "abcde") // Resultado: 1
? AT("bcd", "abcde") // Resultado: 2
? AT("a", "bcde") // Resultado: 0

Re: buscar la coincidencia en toda la cadena

PostPosted: Tue Jan 24, 2017 6:18 am
by artu01
Gracias Jose Luis quizas no me haya dejado entender pero quiero que en un xbrowse conforme vaya digitando en una busqueda se vayan filtrando los registros segun mi cadena a buscar pero que no solamente la coincidiencia sea desde el principio sino que este sea en cualquier parte sobre el campo.
Creo que Sistem me ha dado una luz, probare y comento

Re: buscar la coincidencia en toda la cadena

PostPosted: Tue Jan 24, 2017 3:00 pm
by Carlos Mora
Hola
Si la variable donde se encuentra lo que buscas se llama, por ejemplo, cSearch, y el campo donde buscas es Descrip, entonces usa el siguiente filtro

SET FILTER TO cSearch$Field->Descrip


El operador $ : a$b retorna .T. si a está dentro de b, en cualquier lugar. Tambien se puede hacer con AT(), pero $ hace lo que buscas.

Re: buscar la coincidencia en toda la cadena

PostPosted: Tue Jan 24, 2017 10:29 pm
by artu01
Sistem wrote:artu01
con xbrowse yo uso asi:
oLbx:lIncrFilter := .t.
oLbx:lSeekWild := .t.

@ 1, 1 SAY oLbx:oSeek PROMPT oLbx:cSeek PICTURE "@!" UPDATE OF oDlg PIXEL COLOR CLR_BLACK FONT oFont SIZE 220, 22 BORDER

Sistem
Funciono Perfecto! .... eso si tuve que ponerle AUTOSORT al xbrowse que dicho sea de paso es una maravilla te ahorra
mucho codigo de programación

Mil gracias a todos

Re: buscar la coincidencia en toda la cadena

PostPosted: Wed Jan 25, 2017 12:04 am
by artu01
Sistem wrote:artu01
con xbrowse yo uso asi:
oLbx:lIncrFilter := .t.
oLbx:lSeekWild := .t.

@ 1, 1 SAY oLbx:oSeek PROMPT oLbx:cSeek PICTURE "@!" UPDATE OF oDlg PIXEL COLOR CLR_BLACK FONT oFont SIZE 220, 22 BORDER

Ahora tengo otro problema como es que le quito el filtro al xbrowse, puse lo de abajo pero no resulta no me aparecen todos los registros.
Code: Select all  Expand view

oBrw:lIncrFilter := .f.
oBrw:lSeekWild := .f.
oBrw:cFilterFld := ""
TABLA->(ORDSCOPE(TOPSCOPE,NIL))
TABLA->(ORDSCOPE(BOTTOMSCOPE,NIL))
 

Re: buscar la coincidencia en toda la cadena

PostPosted: Wed Jan 25, 2017 12:24 am
by artu01