Aplicar filtro no browse

Projeto [x]Harbour - Compilador de código aberto compatível com o 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

Aplicar filtro no browse

Mensagem por marcos.gurupi »

Caros, como eu faco para aplicar esse exemplo em um objeto do browse?

Código: Selecionar todos

Local aCust:={}
DO WHILE OrdWildSeek( "*CASA*", .T. )
   AAdd( aCust, CADASTRO->Fantasia )
ENDDO
AEval(aCust, {|c| QOut(c) } )
Agora quero aplicar o filtro no browse. Como faco?

Marcos Roberto.
Marcos Roberto
NetService Software
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Re: Aplicar filtro no browse

Mensagem por Itamar M. Lins Jr. »

Ola!
Que tal criar um indice teporário com a condição desejada ?
index on ... for OrdWildSeek( "*CASA*", .T. ) temporary

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
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

Re: Aplicar filtro no browse

Mensagem por marcos.gurupi »

Certo. Imagine o usuario digitando CASA e o sistema criando o indice, depois o usuario digita AGRO o sistema cria outro indice. Isso nao poderia dah boro?

Marcos Roberto.
Marcos Roberto
NetService Software
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Aplicar filtro no browse

Mensagem por sygecom »

Olá Marcos,

Não entendi muito bem o que você gostaria de fazer, mas vou arisca em dar um exemplo:

Código: Selecionar todos

#include "inkey.ch"
#include "hwgui.ch"

**********************
FUNCTION VISUALIZA_LOG
**********************
Local oFrm, oRDBcodigo, oRDBnome
Local aARRAY_DATA:={}

PRIVATE r1 := 1
PRIVATE wNOME := SPACE(80)
PRIVATE oGet1, lOpcaoRadio:=2, oRadiobutton1, oRadiobutton2, oGroup1, LSAY1
Private cnomold := ""

SELE HIS_LOG
DBGOTOP()

INIT DIALOG oFrm TITLE "Pesquisa de Acessos Historico" CLIPPER ;
FONT HFont():Add( '',0,-14,400,,,);
AT 0,0;
SIZE GETDESKTOPWIDTH(),GETDESKTOPHEIGHT()-50 ;
ICON HIcon():AddResource(1001) ;
ON INIT {|| (cnomold := oGet1:title) };
ON EXIT  {|| DBCLOSEALL(),.T.};
STYLE WS_POPUP+WS_CAPTION+DS_CENTER +WS_SYSMENU+WS_MINIMIZEBOX+WS_MAXIMIZEBOX+WS_VISIBLE

  @ 15,GETDESKTOPHEIGHT()-200 SAY LSAY1 CAPTION "Modulo de acesso.:" SIZE 150,22

  @ 165,GETDESKTOPHEIGHT()-200 Get oGet1 VAR wNOME SIZE 300,24;
  STYLE ES_AUTOHSCROLL  PICTURE '@!' MAXLENGTH 80;
  ON CHANGE {|| FOCALIZA_BRW() };
  TOOLTIP "Clique Aqui Para buscar um Nome"


@ 10,40 BROWSE oBrw DATABASE OF oFrm SIZE GETDESKTOPWIDTH()-30, GETDESKTOPHEIGHT()-250  ;
FONT HFont():Add( '',0,-12,400,,,);
STYLE  WS_VSCROLL + WS_HSCROLL

oBrw:alias := "HIS_LOG"

oBrw:bKeyDown := {|o,key| Browse_Inv2(o, key ) }
@ 5,10 say "F1 - Sobre  / F2 - Busca  / F4 - Muda Ordem  / F5 - Gera Excel  / F9 - Calculadora" size GETDESKTOPWIDTH()-20,20;
STYLE SS_CENTER COLOR x_BLUE

  @ 5,GETDESKTOPHEIGHT()-150 GROUPBOX grpConfiguracao  CAPTION "Ordem de Visualização"  SIZE 380,50;
  COLOR x_BLUE

  @ 400,GETDESKTOPHEIGHT()-150 GROUPBOX oGroup1 CAPTION "Tipo de Busca" SIZE 250,50

   RADIOGROUP
      @ 420 ,GETDESKTOPHEIGHT()-130 RADIOBUTTON oRadiobutton1 CAPTION "&Normal"             SIZE 70 ,22 ON CLICK {||lOpcaoRadio:=1}
      @ 500,GETDESKTOPHEIGHT()-130 RADIOBUTTON oRadiobutton2 CAPTION "&Inicio, Meio e Fim"  SIZE 130,22 ON CLICK {||lOpcaoRadio:=2}
   END RADIOGROUP SELECTED 2


  GET RADIOGROUP r1
  		@ 15 ,GETDESKTOPHEIGHT()-130 RADIOBUTTON oRDBcodigo caption "Ordem de Data";
				SIZE 140, 22;
	   TOOLTIP "Escolha essa Opção para Ordenar a Pesquisa por Ordem de Data";
	   ON CLICK {|| DbsetOrder(1),oBrw:Refresh() };
	   COLOR x_BLUE

   	@ 160,GETDESKTOPHEIGHT()-130 RADIOBUTTON oRDBnome caption "Ordem de Usuario";
  		SIZE 180, 22;
    TOOLTIP "Escolha essa Opção para Ordenar a Pesquisa por Ordem de Usuario";
    ON CLICK {|| DbsetOrder(2),oBrw:Refresh() };
    COLOR x_BLUE
  END RADIOGROUP

   oBrw:AddColumn( HColumn():New( "Data",           FieldBlock("DATA")      ,"D",  10,0,,,,,,,,,{|| Atualiza_Filtro(1) }) )
   oBrw:AddColumn( HColumn():New( "Hora",           FieldBlock("HORA")      ,"C",   8,0,,,,,,,,,) )
   oBrw:AddColumn( HColumn():New( "Acessos",        FieldBlock("MODULO")    ,"C",  80,0) )
   oBrw:AddColumn( HColumn():New( "Usuario",        FieldBlock("USUARIO")   ,"C",  25,0) )
   oBrw:AddColumn( HColumn():New( "Matriz / Filial",FieldBlock("EMPRESA")   ,"C",  10,0) )

   oBrw:Freeze:=1                       // congela
   FOR nI := 1 TO Len(oBrw:aColumns)
       oBrw:aColumns[nI]:nJusHead := DT_CENTER    //CENTRALIZA NO NOME DO CAMPO
       oBrw:aColumns[nI]:nJusLin  := DT_LEFT     //COLOCA PARA DIREITA A LINHA
   NEXT

   oBrw:aColumns[2]:length := 10            // TAMANHO
   oBrw:aColumns[3]:length := 82            // TAMANHO
   oBrw:aColumns[4]:length := 27            // TAMANHO

ACTIVATE DIALOG oFrm Show SW_SHOWMAXIMIZED

RETURN NIL

******************************
STATIC FUNCTION FOCALIZA_BRW()
******************************

Private oDlgHabla:=nil
MsgRun("Aguarde...")

SELE HIS_LOG
DBSETORDER(3)
IF lOpcaoRadio=1
   HIS_LOG->( DBSEEK( ALLTRIM( oGet1:title ) ) )
   IF EOF()
      MsgInfo( "Fim do Arquivo dos Registros", "Aviso" )
      DBGOTOP()
   ENDIF
ELSE
   IF eTipo_banco="DBF" // DBF
     	HIS_LOG->( ORDWILDSEEK( "*" + ALLTRIM( oGet1:title ) + "*", .T. ) )
      IF EOF()
         DBGOTOP()
         HIS_LOG->( ORDWILDSEEK( "*" + ALLTRIM( oGet1:title ) + "*", .F. ) )
         IF EOF()
            DBGOTOP()
         ENDIF
      ENDIF
   ELSE // SQL
      SR_SETFILTER("modulo LIKE '%"+ALLTRIM(oGet1:title)+"%'")
      DBGOTOP()
   ENDIF
ENDIF
FIM_RUN()
oBrw:Refresh()
RETURN( .T. )

***********************************
FUNCTION BROWSE_LOG( oBrowse, key )
***********************************
DO CASE
   CASE KEY= VK_ESCAPE
        EndDialog()
   CASE KEY = VK_F1
        Sobre()
   CASE KEY = VK_F2
        BUSCA_NOME(oBrowse)
   CASE KEY = VK_F4
        Lista_ordem(oBrowse)
   CASE KEY = VK_F5
        Gera_Excel(oBrowse)
   CASE KEY = VK_F9
        ShellExecute("calc")
   otherwise
ENDCASE
Return .T.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Re: Aplicar filtro no browse

Mensagem por Itamar M. Lins Jr. »

Se é uma pesquisa incremental, melhor usar seek. Tem exemplos por ai.
O usuario vai digitando letra por letra e a cada letra digitada vai posicionando no registro.

De outra forma é melhor indexar com for mesmo.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Re: Aplicar filtro no browse

Mensagem por Itamar M. Lins Jr. »

Imagine o usuario digitando CASA e o sistema criando o indice, depois o usuario digita AGRO o sistema cria outro indice.
Quando teclar enter, sair do get, inicia-se sempre com um novo indice, porque aquele é jogado fora.(apagado)
Caso esteja em rede use para o nome do indice teporário 'temp'+data + Hora
Inclusive com Harbour pode criar o indice temporário direto na memoria sem necessidade de gravar no HD.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Responder