Busqueda incremental en todo el campo

Busqueda incremental en todo el campo

Postby mariordz » Fri Mar 19, 2010 7:00 pm

Hola amifos del foro, nuevamente solicitando de su ayuda, he implementado un xBrowse con busqueda incremental, pero tengo dos detalles:

1.- Cuando hago una busqueda incremental no veo lo que estoy digitando, es decir, empiezo a teclear y el xBrowse se mueve al primer registro que cumple el criterio de busqueda, pero no veo lo que estoy tecleando, la duda es como le digo al xBrowse que busque el valor contenifo en un get dentro del mismo dialogo?

2.- La busqueda incremental solo encuentra concordancia al inicio del contenido del campo, ¿Como de digo que busque el valor buscado dentro de todo el contenido del campo? Ej. si busco "TORRES" y el nombre de mi cliente es SANDRA TORRES la busqueda no lo va a detectar, ya que "TORRES" no esta al inicio del campo. Adicionalmente desearia que se hiciera un filtrado del resultado obtenido y solo sea eso lo que me muestre en mi xBrowse, les paso parte de mi código para darle una mejor idea de lo que hago.

Muchas gracias por anticipado.
Code: Select all  Expand view  RUN
  Public oDlg, oBrw, oGet1
   Public cBusca := space(25)
   USE &dbcust shared new alias clientes
   index on cliysub to &dbidx1
   index on razonsoc to &dbidx2
   index on razoncom to &dbidx3
   index on contacto to &dbidx4
   index on conta2 to &dbidx5
   index on dir5b to &dbidx6
   close all
   use &dbcust shared new alias clientes
   set index to &dbidx1,&dbidx2,&dbidx3,&dbidx4,&dbidx5,&dbidx6
   DEFINE DIALOG oDlg resource "dlgverdb8"// FROM 5,10 TO 20,60
   oBrw := TXBrowse():New( oDlg )
   //ESTILOS DE LINEAS
   oBrw:nMarqueeStyle := MARQSTYLE_HIGHLROW //barra selectora
   oBrw:nColDividerStyle := LINESTYLE_INSET
   oBrw:nRowDividerStyle := LINESTYLE_INSET
   oBrw:lColDividerComplete := .t. //completa pintado hasta el footer cuando lineas no llenan todo el browse
   //HEADERS Y FOOTERS
   oBrw:nHeaderHeight := 22 //Altura cabeceras de col
   oBrw:lFooter := .t. //Que tendrá footer
   oBrw:nFooterLines := 1 //Lineas del footer
   oBrw:nFooterHeight := 22 //Altura del Footer
   oBrw:lRecordSelector := .t. //poner o no, COL de la flechita de la izq
   //COLORES (texto y fondo del texto)
   oBrw:bClrHeader := {|| { nRGB(152, 251, 152), nRGB(47, 79, 79) } }//{|| { nRGB(140, 0, 0), nRGB(229,0,0) } } // VERDECITO
   oBrw:bClrFooter := oBrw:bClrHeader
   oBrw:bClrStd := {|| { nRGB( 0, 0, 0), nRGB(255,248,220) } } // colores para lineas normales
   oBrw:bClrSel := {|| { nRGB( 0, 0,255), nRGB(241,222,088) } } // para barra de linea selecc cuando el control no tiene el foco
   oBrw:bClrSelFocus := {|| { nRGB( 0, 0, 0), nRGB(248,195, 34) } } // para barra de linea selecc cuando el control tiene el foco
   oBrw:nRowHeight := 19 //altura entre lineas
   //COLUMNAS DEL BROWSE
   oCol = oBrw:AddCol()
   oCol:bStrData = { || str(clientes->no_clien)+"-"+str(clientes->no_subcli) }
   oCol:nDataStrAlign := 0
   oCol:cHeader = "No. de cliente"
   oCol:cFooter = "No. de cliente"
   oCol:nWidth = 80
   oCol:bLClickHeader:= {|| DbSetorder(1),oBrw:Gotop()}

   oCol = oBrw:AddCol()
   oCol:bStrData =  { || clientes->razonsoc }
   oCol:nDataStrAlign := 0
   oCol:cHeader = "Razon social"
   oCol:cFooter = "Razon social"
   oCol:nFootStrAlign := 0
   oCol:nWidth = 320
   oCol:bLClickHeader:= {|| DbSetOrder(2),oBrw:Gotop() }

..... (MAS COLUMNAS)

   oBrw:SetRDD()

   oBrw:CreatefromResource(0)

REDEFINE GET oGet1 VAR cBusca ID 4 OF oDlg PICTURE "@!" UpDate

oBrw:bSeek := {|c| DbSeek( Upper( c ),oBrw:refresh() ) }
   REDEFINE BTNBMP oBtn ID 2 OF oDlg ACTION ( lpegar := .T., lExit := .F., oDlg:end() )
   REDEFINE BTNBMP oBtn ID 3 OF oDlg ACTION ( lExit := .T., oDlg:end(), ciccc:="N" )
   ACTIVATE DIALOG oDlg CENTERED
 
User avatar
mariordz
 
Posts: 131
Joined: Tue Dec 26, 2006 4:50 pm
Location: Ciudad de México

Re: Busqueda incremental en todo el campo

Postby acuellar » Fri Mar 19, 2010 7:19 pm

Mario, tu indices los tienes que hacer con TAG
Asi:
USE &dbcust shared new alias clientes
index on cliysub TAG CAMPO1 //CUALQUIER NOMBRE SIEMPRE CREA EN INDICE CON EL MISMO NOMBRE DE LA BASE
index on razonsoc TAG CAMPO2
y Hacer esto
Code: Select all  Expand view  RUN

oCol:=oBrw:AddCol()
   oCol:bStrData:= { || CLIENTES->cliysub }
   oCol:nHeadStrAlign := AL_CENTER
   oCol:cHeader:= "COD."
   oCol:nWidth:=32
   oCol:nDataStrAlign:= AL_CENTER
   oCol:cSortOrder:=CAMPO1   //AQUI USAS EL INDICE TAG
                 
   oCol:=oBrw:AddCol()
   oCol:bStrData  := { || CLIENTES->razonsoc  }
   oCol:nHeadStrAlign := AL_CENTER
   oCol:cHeader:= "R A Z O N "
   oCol:nWidth:=300
   oCol:cSortOrder:=CAMPO2

Y... PARA TU BUSQUEDA

   @4,260 SAY oSay VAR xClave SIZE 40,8 PIXEL OF oDlg UPDATE PICTURE "@!"
   oBrw:bSeek := {|c| (DbSeek(UPPER(c)) ) }; oBrw:oSeek:=oSay
 


Al dar click sobre el HEADER se invierte el indice como el explorer de windows

Espero te sirva

Saludos

Adhemar
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1645
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Busqueda incremental en todo el campo

Postby mariordz » Fri Mar 19, 2010 10:01 pm

Hola, gracias por tu respuesta, esto funciona bien, aunque aún no logro hacer lo que necesito, esta busqueda sigue dandome resultados solo si mi busqueda esta al inicio del campo. Como puedo agregar la busqueda tipo "AT()", para que busque lo que estoy digitando en todo el contenido del campo y no solo en al inicio?. Gracias
User avatar
mariordz
 
Posts: 131
Joined: Tue Dec 26, 2006 4:50 pm
Location: Ciudad de México

Re: Busqueda incremental en todo el campo

Postby Pedro » Fri Mar 19, 2010 11:14 pm

En xHarbour creo que existe la funcion OrdWildSeek donde puedes emplear comodines ( * y ? ) para buscar dentro del indice.
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
User avatar
Pedro
 
Posts: 464
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: Busqueda incremental en todo el campo

Postby JavierVital » Sat Mar 20, 2010 4:22 am

Mario, lo que yo creo que debes de hacer es un filtro, yo lo hago con ADS y el tiempo de respuesta es muy bueno
lo que voy teckeando lo va filtrando y solo me va poniendo el resultado, lo hago con una tabla de clientes de unos 5000 registros

Saludos.
User avatar
JavierVital
 
Posts: 105
Joined: Thu Feb 26, 2009 4:08 pm

Re: Busqueda incremental en todo el campo

Postby joseluisysturiz » Sat Mar 20, 2010 4:41 am

Creo lo que el colega quieres es que la busqueda tambien sea de una PALABRA dentro de una FRASE para ver si hay coincidencia y que no se cumpla solo por el indice, de la forma que el quiere no hace fala indice, es solo buscar una palabra en una frase, hay una funcion de clipper que hace eso...reviso y te aviso... yo lo hacia en un sistema bajo fox base... saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 32 guests