Dbsetfilter no funciona

Dbsetfilter no funciona

Postby davidbarrio » Tue Jan 03, 2023 5:36 pm

BUENAS TARDES

tengo un browse

Code: Select all  Expand view  RUN
 @ 0.875, 1 xBROWSE oBrw ;
                       FIELDS (FormuNAO)->NUMERO ,;
                              AllTrim((TipoNAO)->DETALLE)+' - '+AllTrim((TipoDETE)->DETALLE) ,;
                              AllTrim((TipoENTI)->DETALLE)+' '+AllTrim((FormuNAO)->DETADETE) ,;
                              (PERAUTO)->NOMBRE ,;
                              STATUS((FormuNAO)->STATUS) ;
                       HEADERS 'Numero' ,;
                               'Tipo / Detectada' ,;
                               'Entidad / Detalle' ,;
                               'Animador' ,;
                               'Estado' ;
                       SIZES 55,250,150,120,210 ;
                       SIZE 415,140 ;
                       ALIAS FormuNAO ;
                       AUTOSORT CELL LINES NOBORDER ;
                       Of oDlgCar ;
                       UPDATE

  WITH OBJECT oBrw

    //:nRowHeight                 := 30

      :nRowDividerStyle = LINESTYLE_NOLINES
      :nColDividerStyle = LINESTYLE_BLACK
      :nMarqueeStyle = MARQSTYLE_HIGHLROW
      :lHScroll := (.F.)

      :bClrStd = { || If( (FormuNAO)->STATUS = 50 , { CLR_BLACK , RGB( 110,208,181 ) }, ;           // CERRADO
                          If( (FormuNAO)->STATUS = 90 , { CLR_BLACK , RGB( 238,233,233 ) }, ;           // Anulado
                                                        { CLR_BLACK , RGB( 255,255,255 ) } )) }

      :bClrSel = { || { CLR_WHITE , RGB( 0x33, 0x66, 0xCC ) } }
     
      :SetColor( CLR_BLACK, RGB( 232, 255, 232 ) )

      :CreateFromCode()

  END



y cuando querio aplicar un DBSETFITLER no aplica el filtro.

en AplicaFiltro := "(FormuNAO)->TIPOFORM=2"

paso en:

AplicaFiltro1 := "{||"+AplicaFiltro+"}"
AplicaFiltro2 := '"'+AplicaFiltro+'"' ,;

cuando aplico el DBSETFILTER no funciona

dbSetFilter( &(AplicaFiltro1) , AplicaFiltro2 ) ) )

Code: Select all  Expand view  RUN
 @  LineaBTN,430 BTNBMP oBtnFiltro ;
                   SIZE 60,13 ;
                   Of oDlgCar ;
                   PROMPT 'Filtro'  ;
                   tooltip '' ;
                   CENTER FLAT ;
                   COLOR CLR_BLACK,RGB(255,250,205) ;
                   FONT oFont2 ;
                   ACTION ( AplicaFiltro := FiltroFormulario( oBrw , FormuNAO ) ,;
                            DBSELECTAREA(FormuNAO) ,;
                            If(len(AplicaFiltro)=0 ,;
                               (FormuNAO)->( DbClearFilter() )  ,;
                               ( AplicaFiltro1 := "{||"+AplicaFiltro+"}" ,;
                                 AplicaFiltro2 := '"'+AplicaFiltro+'"' ,;
                                                        dbSetFilter( &(AplicaFiltro1) , AplicaFiltro2 ) ) ) ,;         
                                                        (FormuNAO)->(dbgotop()) ,;
                            oBrw:Refresh() ,;
                            oBrw:SetFocus() )


si cargo manuelmente en el dbsetfilter( {||(FormuNAO)->TIPOFORM=2} , "(FormuNAO)->TIPOFORM=2" ) FUNCIONA CORRECTAMENTE

muchas gracias

david
davidbarrio
 
Posts: 14
Joined: Wed Apr 04, 2007 11:56 am

Re: Dbsetfilter no funciona

Postby karinha » Tue Jan 03, 2023 7:01 pm

Porque no usas ORDSCOPES() mui mejor y infinitamente más rápido.

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7828
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Dbsetfilter no funciona

Postby davidbarrio » Tue Jan 03, 2023 8:07 pm

el tema es que en la variable AplicaFiltro puede habler mas de una condición.

david
davidbarrio
 
Posts: 14
Joined: Wed Apr 04, 2007 11:56 am

Re: Dbsetfilter no funciona

Postby karinha » Wed Jan 04, 2023 3:00 pm

hacer el filtro en una función, y no directamente en la ACCIÓN del botón.

también puede utilizar índices temporales.

Code: Select all  Expand view  RUN


     INDEX ON NOMBRE TAG NOMBRE TO CDXTMP MEMORY

 


Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7828
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Dbsetfilter no funciona

Postby Garbi » Thu Jan 05, 2023 11:01 am

Yo uso indices temporales con condiciones y es espactular la velocidad de ejecución comparado con un filtro.

Ejemplo

Code: Select all  Expand view  RUN

ccondicion:=""
    IF vfancho > 1
       ccondicion:="ancho=val(tfancho[vfancho])"
    endif
    IF vfdensidad > 1
      if empty(ccondicion)
         ccondicion:="densidad=(tfdensidad[vfdensidad])"
      else
         ccondicion:=ccondicion+" .and. "+"densidad=(tfdensidad[vfdensidad])"
      endif
    endif
    IF vfcalidad > 1
      if empty(ccondicion)
         ccondicion:="calidad=(tfcalidad[vfcalidad])"
      else
         ccondicion:=ccondicion+" .and. "+"calidad=(tfcalidad[vfcalidad])"
      endif
    endif
    IF vfaltura > 1
      if empty(ccondicion)
         ccondicion:="altura=val(tfaltura[vfaltura])"
      else
         ccondicion:=ccondicion+" .and. "+"altura=val(tfaltura[vfaltura])"
      endif
    endif

INDEX ON Transform(year((cbloque)->fecha),"9999")+STRTRAN(Transform((cbloque)->numero,"999999")," ","0");
      TO "TEMP" for &(ccondicion) DESCENDING MEMORY


Espero que te sirva.
Saludos,
Regards,

Jose Luis Alepuz
joseluis@mancomputer.com
www.mancomputer.com
Garbi
 
Posts: 340
Joined: Wed Nov 02, 2005 3:28 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 52 guests