AdsSetAof()

Post Reply
RuFerSo
Posts: 55
Joined: Mon Feb 20, 2012 2:56 pm

AdsSetAof()

Post by RuFerSo »

Hola a kigos:

Usando AdsSetAof() en un xBrowse, los datos que muestra corresponde a lo
solicitado, lo extraño es que el comportamiento de xBrowse es raro. No puedo ir recorriendolo
con la flecha, ya que el xBrowse se saltea algun registro mostrado.

local cTexto:= "Algo a buscar"
DBSelectArea(DBLISTA)
(DBLISTA)->(AdsClearAOF())
(DBLISTA)->(OrdScope(0,))
(DBLISTA)->(OrdScope(1,))
(DBLISTA)->(OrdSetFocus('NOMBRE33')) //Filtro FTS
(DBLISTA)->(DbGoTop())
(DBLISTA)->(AdsSetAof( '"' +cTexto+ '" $ P_NOM') )
Mbrw:Refresh(.t.)

La uso para buscar una o mas palabras en la descripcion de un artículo.

Saludos y Gracias

Ruben Fernandez
User avatar
JavierVital
Posts: 105
Joined: Thu Feb 26, 2009 4:08 pm
Contact:

Re: AdsSetAof()

Post by JavierVital »

Yo lo hago de esta manera :

Code: Select all

    cFil1 := "'"+AllTrim(vFil)+"' $"+"PROVEDOR->PROVEDOR"
    cFil2 := "'"+AllTrim(vFil)+"' $"+"PROVEDOR->NOMBRE"
    cFiltro := "{||"+cFil1+" .OR. "+cFil2+"}"
    gFiltro := '"'+cFil1+' .OR. '+cFil2+'"'
    DbSetfilter(&cFiltro,&gFiltro)
 
la vFil es una cadena que voy tecleando y en el browse se va filtrando

Saludos.
User avatar
carlos vargas
Posts: 1421
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: AdsSetAof()

Post by carlos vargas »

Luego de definir tu browse
haz un

SetRddAds( oBrowse )

salu2
carlos vargas

Code: Select all

PROCEDURE SetRddAds( oBrw, lCell, nFreeze )
   LOCAL cAlias  := oBrw:cAlias

   DEFAULT nFreeze := 0 , ;
           lCell   := FALSE

   AEval( oBrw:aCols, {|oCol| oCol:lAllowSizing := FALSE } )

   WITH OBJECT oBrw
      :lRecordSelector        := TRUE
      :nStretchCol            := STRETCHCOL_LAST
      :nColDividerStyle       := LINESTYLE_DARKGRAY
      :lColDividerComplete    := TRUE
      :bClrHeader             := { || { CLR_BLUE,  CLR_BROWTIT, CLR_BLACK } }
      :bClrSelFocus           := { || { CLR_WHITE, CLR_CYAN               } }
      :bClrFooter             := { || { CLR_RED,   CLR_BROWTIT, CLR_BLACK } }
      :bClrSel                := { || { CLR_WHITE, CLR_BLACK              } }
      :l2007                  := FALSE
      :lAllowColHiding        := FALSE
      :lAllowColSwapping      := FALSE
      :lAllowRowSizing        := FALSE
      :lAllowCopy             := FALSE
      :lKinetic               := FALSE
      :lKineticBrw            := FALSE
      :lHScroll               := FALSE
      :nHeaderHeight          := 25
      IF !Empty( cAlias )
         ::bGoTop              := {|| ( cAlias )->( DBGoTop()    ) }
         ::bGoBottom           := {|| ( cAlias )->( DBGoBottom() ) }
         ::bSkip               := {| n | IIf( HB_IsNil( n ), n := 1, ), ( cAlias )->( DbSkipper( n ) ) }
         ::bBof                := {|| ( cAlias )->( Bof() ) }
         ::bEof                := {|| ( cAlias )->( Eof() ) }
         ::bBookMark           := {| n | IIf( HB_IsNil(n), ( cAlias )->( RecNo() ), ( cAlias )->( DBGoTo( n ) ) )}
         IF "ADS" $ ( cAlias )->( RddName() )
            ::bKeyCount        := {|| ( cAlias )->( AdsKeyCount( , , ADS_RESPECTFILTERS ) ) }
            ::bKeyNo           := {| n | IIf( HB_IsNil( n ), ( cAlias )->( AdsKeyNo( , , ADS_RESPECTFILTERS ) ), ( cAlias )->( OrdKeyGoto( n ) ) ) }
         ELSE
            ::bKeyCount        := {|| ( cAlias )->( OrdKeyCount() ) }
            ::bKeyNo           := {|| ( cAlias )->( OrdKeyNo()    ) }
         ENDIF
      ENDIF
      IF nFreeze > 0
         :nFreeze             := nFreeze
      ENDIF
      IF !lCell
         :nMarqueeStyle       := MARQSTYLE_HIGHLROW
      ELSE
         :bClrRowFocus        := { || { CLR_BLACK, RGB( 185, 220, 255 ) } }
         :nMarqueeStyle       := MARQSTYLE_HIGHLCELL
      ENDIF
   END

RETURN
 
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
RuFerSo
Posts: 55
Joined: Mon Feb 20, 2012 2:56 pm

Re: AdsSetAof()

Post by RuFerSo »

Carlos: Excelente, solo con colocar estas 2 líneas en mi xBrowse quedó funcionando. Ya que las demas definciones las tengo al inicio.

mBrw:bKeyCount := {|| ( DBLISTA )->( AdsKeyCount( , , ADS_RESPECTFILTERS ) ) }
mBrw:bKeyNo := {| n | IIf( HB_IsNil( n ), ( DBLISTA )->( AdsKeyNo( , , ADS_RESPECTFILTERS ) ), ( DBLISTA )->( OrdKeyGoto( n ) ) ) }

Gracias Carlos.


Javier: Muy buena tu función, tomé nota.

Gracias Javier.

Saludos Ruben Fernandez
Miguel Salas
Posts: 132
Joined: Sun Oct 23, 2005 4:09 pm
Location: Pánuco,Ver. México

Re: AdsSetAof()

Post by Miguel Salas »

Hola Rufer

Podrias compartirme tu codigo de este articulo de favor.

gracias de antemano
saludos
VitalJavier
Posts: 188
Joined: Mon Jun 10, 2013 6:40 pm

Re: AdsSetAof()

Post by VitalJavier »

Carlos, Buen dia

Probando tu solución esta muy bien ya no da el salto mal
pero el detalle que tengo 34 usuarios y un catalogo de 8,000 productos
y probando se alenta al hacer la función de buscar algún producto
tecleando varias letras de búsqueda.

Code: Select all

oBrow:bKeyCount := {|| ARTICULOS->( AdsKeyCount( , , ADS_RESPECTFILTERS ) ) }
oBrow:bKeyNo      := {| n | IIf( HB_IsNil( n ), ARTICULOS->( AdsKeyNo( , , ADS_RESPECTFILTERS ) ), ARTICULOS->( OrdKeyGoto( n ) ) ) }
oBrow:bKeyDown  := {|nKey| IIF(nKey=27,oDlg:End(),VALIDAKEYARTICULO1(nKey,oDlg,oBrow))}
 
En la function de VALIDAKEYARTICULO1

Code: Select all

            Select ARTICULOS
            DbGoTop()
            IF !DbSeek(AllTrim(oFil[1,2]))
                DbGoTop()
            ENDIF
            oBrow:Refresh()
 
el seek en esta parte de la función se vuelve lento

Tendras alguna solución para esto, o de que forma buscas ?
Post Reply