Ayuda Busqueda Incremental Xbrowse ???

remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Ayuda Busqueda Incremental Xbrowse ???

Post by remtec »

Amigos Muy buen dia.

Se me presento un problema en la busqueda incremental de Xbrowse

Tengo un Archivo indexado por 3 condiciones, para su busqueda cambie el Set Filter por ORDSCOPE, ya que en Red, creo que es mas rapido el ORDSCOPE, espero no estar equivocado.

El problema se me presenta que al usar ORDSCOPE, te tenido que que indexar de la siguiente Forma:
inde on Nom_Pro tag Med2 to Profesio // Solo por Nombre
inde on Est_Pro+Nom_Pro tag Med3 to Profesio // Aqui he tenido que agregar un campo por tipo+nombre
inde on Ate_Hor+Nom_Pro tag Med4 to Profesio // Ide arriba

Uso un Combobox para seleccionar la formar de filtrar, para que muestre los datos Xbrowse, pero que ademas me permita buscar digitando el Nombre, para el primero indice me funciona bien, pero para los 2 siguientes indices, a digitar no busca, ya que tengo un campo antes del nombre "S" + Nombre.

Desde ya muchas gracias.

Muchos Saludos.
Anonio

Dejo el Codigo:

Code: Select all

...
..
            Abre_dbf("Profesio",1,.f.,"")
            inde on Nom_Pro tag Med2 to Profesio
            inde on Est_Pro+Nom_Pro tag Med3 to Profesio
            inde on Ate_Hor+Nom_Pro tag Med4 to Profesio
            Close Data
....
....
....
.. Para Cambiar Filtro del Combobox.
Function Filtra_Pro(nP,oBrw)

         Sele Profe
         Set Order to
         Do Case
                        Case nP >= 1 .and. nP <= 3
                                Do Case
                                        Case nP == 1
                                                DbSetOrder(2)
                                        Case nP == 2
                                                cVar:="S"
                                                cVar1:="S"
                                                DbSetOrder(3)
                                        Case nP == 3
                                                DbSetOrder(3)
                                                cVar:=" "
                                                cVar1:="N"

                             EndCase
                        Other
                                        DbSetOrder(4)
                                        cVar:="S"
                                        cVar1:="S"
            EndCase
            If nP#1
                    Profe->(ORDSCOPE(0, NIL )) // reset
                    Profe->(ORDSCOPE(1, NIL )) // reset
                Profe->(OrdScope(TOPSCOPE, cVar))
                Profe->(OrdScope(BOTTOMSCOPE, cVar1))
            Endif
        Profe->(DbGotop())
        oBrw:Update()
        oBrw:Refresh()

            Return  .T.


.. Xbrowse

Function Activa_Profe()
    Local oDlg1, oBrw, oFont1,oFont2, oTitu1,oTitu2,oFont3,aStruc,oSay1,oSay2,oGet1,oFont4,oFont5,oTitu3
        Local nPro:=1,  aEstado := {},Estado1:=""


        AADD( aEstado,{"TODOS        "})
        AADD( aEstado,{"SOLO VIGENTES"})
        AADD( aEstado,{"DESACTIVADOS "})
        AADD( aEstado,{"SOLO AGENDA  "})




        Abre_dbf("Profesio",1,.f.,"Profe")
      Set inde to Profesio
      DbSetorder(2)

      Profe->(DbGotop())


     DEFINE FONT oFont  NAME "TAHOMA" SIZE 0,-14
     DEFINE FONT oFont1 NAME 'TAHOMA' SIZE 0,24   BOLD
     DEFINE FONT oFont2 NAME "TAHOMA" SIZE 0,-12  BOLD
     DEFINE FONT oFont3 NAME 'TAHOMA' SIZE 0,18   BOLD
     DEFINE FONT oFont7 NAME "TAHOMA" SIZE 0,-14  BOLD


     DEFINE DIALOG oDlg1 SIZE 550,570 PIXEL FONT oFont3   STYLE nOr( WS_POPUP, WS_VISIBLE, WS_DLGFRAME )
     @ 00,35  SAY otitu1 PROMPT " MAESTRO DE PROFESIONALES " PIXEL OF oDlg1 COLORS RGB(12, 135, 27)   FONT oFont1

     @ 016,103 SAY "Seleccione"   SIZE 80,10 PIXEL OF oDlg1  RIGHT  FONT oFont1
     @ 016,190 ComboBox oGet1 Var nPro Items ArrTranspose(aEstado)[1] SIZE 70,200 PIXEL OF oDlg1  COLORS RGB(55, 255, 153)     FONT oFont2;
                         ON CHANGE ((Estado1:=ArrTranspose(aEstado)[1][oGet1:nAt]),IF(!Filtra_Pro(@nPro,oBrw),(MsgStop("TODO BIEN"),oBrw:Setfocus(),.F.), (oBrw:Refresh(),oBrw:Setfocus(), .T.) ))

     @ 30,10 XBROWSE oBrw SIZE 300,-35 PIXEL OF oDlg1 DATASOURCE "Profe" ;
            HEADERS 'Nombre del Profesional','Especialidad','Vigencia','Agenda';
            COLUMNS 'Nom_Pro','Tip_Esp','Est_Pro','Ate_Hor';
            PICTURES "@!","@!" ,"!","!";
            COLSIZES 280, 85, 70, 70;
      CELL LINES AUTOSORT NOBORDER;
                             oBrw:nMarqueeStyle :=MARQSTYLE_HIGHLROW
                             oBrw:nColDividerStyle := LINESTYLE_RAISED
                             oBrw:nRowDividerStyle := LINESTYLE_RAISED
                                 oBrw:bClrHeader := {|| { nRGB(140, 0, 0), nRGB( 231, 242, 255 ), } }
                                 oBrw:nOpacity    := 230
                                 oBrw:nHeaderHeight      := 35
                                 oBrw:nFreeze       := 2

                                 oBrw:lSeekBar:= .t.

                                 oBrw:bClrStd  := { || If( Eval( oBrw:bKeyNo,,oBrw1) % 2 == 0, { CLR_BLACK, RGB( 198, 255, 198 ) },;
                                          { CLR_BLACK, RGB( 232, 255, 232 ) } ) }    // Efecto Cebra
                                 oBrw:aCols[ 1 ]:oDataFont := oFont7

                                 oBrw:bClrStd       := {|| { nRGB(  0,  0,  0), nRGB(255,248,220) } }
                                 oBrw:bClrSelFocus  := {|| { nRGB(  255,  255,  255), nRGB(102, 178, 255) } }
                                 oBrw:bClrSel       := {|| { nRGB(  0,  0,255), nRGB(241,222,088) } }  // para barra de linea selecc cuando el control no tiene el foco
                                 oBrw:lAutoSort := .t.
                                 oBrw:lFooter := .f.
                                 oBrw:lHScroll := .f.
                             oBrw:lIncrFilter   := .F.
                             oBrw:lSeekWild     := .F.                   &&  .T. Busca Contenido, .F. Que comience con lo que digita
                                 oBrw:SetStyle( 2018)
                                 oBrw:nColorPen := CLR_RED
                                 oBrw:bChange := {|| oBrw:Refresh() }
                                 oBrw:aCols[1]:bClrHeader := { || { CLR_HRED,CLR_WHITE } }       // Aplico Color a Una Columna
                                 oBrw:aCols[ 1 ]:oHeaderFont :=  oFont7                  // Aplico Font a una Columna
                                 oBrw:aCols[ 3]:nDataStrAlign := AL_CENTER
                                 oBrw:aCols[ 4]:nDataStrAlign := AL_CENTER

                             WITH OBJECT oBrw:Vigencia
                                        :bLDClickData  := { || Cambia_Esta(), oBrw:Refresh() }      // Permite Seleccionar Sobre una Celda
                                 END WITH

                                WITH OBJECT oBrw:Agenda
                                   :bLDClickData  := { || Cambia_Agen(), oBrw:Refresh() }
                                END WITH


                                  oBrw:CreateFromCode()


    @ 253,90 BTNBMP SIZE 30, 30 PROMPT "SALIR"  OF oDlg1 PIXEL 2007 Resource "#8002"  FONT oFont7 ;
            ToolTip  "SALIR DEL SISTEMA";
            ACTION oDlg1:End()


   ACTIVATE DIALOG oDlg1 CENTERED  ON INIT (oBrw:SetFocus())


     RELEASE FONT oFont,oFont1,oFont7,oFont3,oFont2

     Close all

     Return nil





 
Last edited by remtec on Sun Jan 19, 2020 2:41 pm, edited 2 times in total.
artu01
Posts: 306
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: Ayuda Busqueda Incremental Xbrowse

Post by artu01 »

Hola remtec
no entendi bien donde va la 'S' pero podria ayudarte asi:

Code: Select all

inde on 'S'+Est_Pro+Nom_Pro tag Med3 to Profesio // Aqui he tenido que agregar un campo por tipo+nombre
inde on 'S'+Ate_Hor+Nom_Pro tag Med4 to Profesio // Ide arriba
 
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: Ayuda Busqueda Incremental Xbrowse

Post by remtec »

Hola Artu01

Muchas gracias por responder.

Lo de la “S” es un ejemplo el índice está bien, solo q cuando debo buscar en forma incremental, en los índices 2 y 3,el usuario digitara un nombre, pero el índice está compuesto por 2 Campos.

Espero haberte dejado más claro mi problema.

Muchos saludos
Antonio
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: Ayuda Busqueda Incremental Xbrowse ?

Post by remtec »

Hola Amigos

Alguna idea??

Saludos
Antonio
artu01
Posts: 306
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: Ayuda Busqueda Incremental Xbrowse ?

Post by artu01 »

Remtec:
y has intentado ponerle esto

Code: Select all


            If nP#1
                    Profe->(ORDSCOPE(0, NIL )) // reset
                    Profe->(ORDSCOPE(1, NIL )) // reset
                Profe->(OrdScope(TOPSCOPE, cVar))
                Profe->(OrdScope(BOTTOMSCOPE, cVar1))
                Profe->(Dbseek(cVar))
            else
               Profe->(DbGotop())
            Endif
        
        oBrw:Update()
        oBrw:Refresh()

 
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: Ayuda Busqueda Incremental Xbrowse ?

Post by remtec »

Hola Artu01

Muchas gracias por responder.

Lo q me indicas no es lo q necesito, la búsqueda incremental se va realizando en la medida que el usuario va digitando.
Solo q en mi caso, a esta digitacion se debe anteponer una variable q trae un valor al ingresar al Xbrowse, por lo q la búsqueda debe hacerla así: Variable + dato digitado.

Pienso q no debe ser tan complicado, solo q para mi no logre encontrar la forma.
Con Set Filter, me funcionaba, pero al cambiar a Ordscooe, tuve q crear indices nuevos.

Muchos Saludos.
Antonio.
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: Ayuda Busqueda Incremental Xbrowse ???

Post by remtec »

Hola Amigos,

Alguna idea, esto complicado con este problema?

Saludos

Antonio
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Ayuda Busqueda Incremental Xbrowse ???

Post by FranciscoA »

Hola Antonio.
Creo que de esta forma podés conseguir lo que buscas:

Code: Select all

       :lSeekBar       := .T.
       :lIncrFilter    := .F.
       :lSeekWild      := .T.  
 
Intentalo.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Ayuda Busqueda Incremental Xbrowse ???

Post by FranciscoA »

Por otra parte, hice pruebas utilizando los siguientes _ en tu codigo:
//Para Cambiar Filtro del Combobox.

Code: Select all

//-----------------------------------------//
Function Filtra_Pro(nP,oBrw)
LOCAL cVar, cVar1

   Sele Profe
   Set Order to

   Do Case
   Case nP >= 1 .and. nP <= 3
       Do Case
       Case nP == 1     //TODOS
           ORDSETFOCUS("MED2")
           Profe->(OrdScope(TOPSCOPE, NIL))
           Profe->(OrdScope(BOTTOMSCOPE, NIL))
       Case nP == 2     //SOLO VIGENTES
           ORDSETFOCUS("MED3")
           cVar  := "S"
           cVar1 := "S"
       Case nP == 3     //DESACTIVADOS
           ORDSETFOCUS("MED3")
           cVar  := "N"
           cVar1 := "N"
       EndCase
   Other        //SOLO AGENDA
       ORDSETFOCUS("MED4")
       cVar  := "S"
       cVar1 := "S"
   EndCase

   If nP#1
      Profe->(OrdScope(TOPSCOPE, cVar))
      Profe->(OrdScope(BOTTOMSCOPE, cVar1))
   Endif

   Profe->(DbGotop())
   oBrw:Refresh()

Return  .T.
 
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Ayuda Busqueda Incremental Xbrowse ???

Post by FranciscoA »

Este es el código completo para las pruebas:

Code: Select all

//--------------------------------------------------------//
Function Medicos()

REQUEST DBFCDX

   DbUseArea(.T.,"DBFCDX","PROFESIO","PROFE",.F.)
   index on FIELD->Nom_Pro tag Med2 to Profesio                    
   index on FIELD->Est_Pro + FIELD->Nom_Pro tag Med3 to Profesio   
   index on FIELD->Ate_Hor + FIELD->Nom_Pro tag Med4 to Profesio   
   PROFE->(dbcloseArea())

   Activa_Profe()
RETURN NIL

//Para Cambiar Filtro del Combobox.
//-----------------------------------------//
Function Filtra_Pro(nP,oBrw)
LOCAL cVar, cVar1

   Sele Profe
   Set Order to

   Do Case
   Case nP >= 1 .and. nP <= 3
       Do Case
       Case nP == 1     //TODOS
           ORDSETFOCUS("MED2")
           Profe->(OrdScope(TOPSCOPE, NIL))
           Profe->(OrdScope(BOTTOMSCOPE, NIL))
       Case nP == 2     //SOLO VIGENTES
           ORDSETFOCUS("MED3")
           cVar  := "S"
           cVar1 := "S"
       Case nP == 3     //DESACTIVADOS
           ORDSETFOCUS("MED3")
           cVar  := "N"
           cVar1 := "N"
       EndCase
   Other        //SOLO AGENDA
       ORDSETFOCUS("MED4")
       cVar  := "S"
       cVar1 := "S"
   EndCase

   If nP#1
      Profe->(OrdScope(TOPSCOPE, cVar))
      Profe->(OrdScope(BOTTOMSCOPE, cVar1))
   Endif

   Profe->(DbGotop())
   oBrw:Refresh()

Return  .T.

//-----------------------------------------//
Function Activa_Profe()
    Local oDlg1, oBrw, oFont, oFont1,oFont2,oFont3,oFont7, oTitu1,oTitu2,aStruc,oSay1,oSay2,oGet1,oTitu3
    Local nPro:=1,  aEstado := {},Estado1:=""

    AADD( aEstado,{"TODOS        "})
    AADD( aEstado,{"SOLO VIGENTES"})
    AADD( aEstado,{"DESACTIVADOS "})
    AADD( aEstado,{"SOLO AGENDA  "})

    USE PROFESIO ALIAS "PROFE" SHARED VIA "DBFCDX"
    Set index to Profesio
    DbSetorder(2)   //"MED3"

    Profe->(DbGotop())

    DEFINE FONT oFont  NAME "TAHOMA" SIZE 0,-14
    DEFINE FONT oFont1 NAME 'TAHOMA' SIZE 0,24   BOLD
    DEFINE FONT oFont2 NAME "TAHOMA" SIZE 0,-12  BOLD
    DEFINE FONT oFont3 NAME 'TAHOMA' SIZE 0,18   BOLD
    DEFINE FONT oFont7 NAME "TAHOMA" SIZE 0,-14  BOLD

    DEFINE DIALOG oDlg1 SIZE 570,570 PIXEL FONT oFont3   STYLE nOr( WS_POPUP, WS_VISIBLE, WS_DLGFRAME )
    @ 00,35  SAY otitu1 PROMPT " MAESTRO DE PROFESIONALES " PIXEL OF oDlg1 COLORS RGB(12, 135, 27)   FONT oFont1

    @ 016,103 SAY "Seleccione"   SIZE 80,10 PIXEL OF oDlg1  RIGHT  FONT oFont1
    @ 016,190 ComboBox oGet1 Var nPro Items ArrTranspose(aEstado)[1] SIZE 70,200 PIXEL OF oDlg1  FONT oFont2;  // COLORS RGB(55, 255, 153)
              ON CHANGE ((Estado1:=ArrTranspose(aEstado)[1][oGet1:nAt]),IF(!Filtra_Pro(@nPro,oBrw),(MsgStop("TODO BIEN"),oBrw:Setfocus(),.F.), (oBrw:Refresh(),oBrw:Setfocus(), .T.) ))

    @ 30,10 XBROWSE oBrw SIZE 300,-35 PIXEL OF oDlg1 DATASOURCE "Profe" ;
            HEADERS 'Nombre del Profesional','Especialidad','Vigencia','Agenda';
            COLUMNS 'Nom_Pro','Tip_Esp','Est_Pro','Ate_Hor';
            PICTURES "@!","@!" ,"!","!";
            COLSIZES 180, 150, 120, 70;
            CELL LINES AUTOSORT NOBORDER

    WITH OBJECT oBrw
       :nMarqueeStyle  := MARQSTYLE_HIGHLROW
       :bClrHeader     := {|| { nRGB(140, 0, 0), nRGB( 231, 242, 255 ), } }
       :nHeaderHeight  := 35
       :nFreeze        := 2
       :lSeekBar       := .T.
       :lIncrFilter    := .F.
       :lSeekWild      := .T.  
       :lFooter  := .f.
       :lHScroll := .f.

       :nOpacity       := 230
       :SetStyle( 2018)
       :nColorPen      := CLR_RED

       :aCols[1]:oDataFont     := oFont7
       :aCols[1]:bClrHeader    := { || { CLR_HRED,CLR_WHITE } }       // Aplico Color a Una Columna
       :aCols[1]:oHeaderFont   :=  oFont7                  // Aplico Font a una Columna
       :aCols[3]:nDataStrAlign := AL_CENTER
       :aCols[4]:nDataStrAlign := AL_CENTER

       :CreateFromCode()
    END

    @ 253,90 BTNBMP SIZE 30, 30 PROMPT "SALIR"  OF oDlg1 PIXEL 2007  FONT oFont7 ;
            ToolTip  "SALIR DEL SISTEMA";
            ACTION oDlg1:End()

   ACTIVATE DIALOG oDlg1 CENTERED  ON INIT (oBrw:SetFocus())

   RELEASE FONT oFont,oFont1,oFont2,oFont3,oFont7
   Close all
   Ferase(".\profesio.cdx")

Return nil
 
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: Ayuda Busqueda Incremental Xbrowse ???

Post by remtec »

Hola Fracisco,

Como estas, como siempre muchas gracias por tu ayuda.

He ejecutado tu codigo y lamentablemente sigo teniendo el mismo problema.

Como ves los indices Med3 y Med4, estan compuestos por 2 campos, el Xbrowse filtra bien, pero mi problemas es que al realizar Busqueda Incremental, mientras el usuario Digita el nombre del profesional que desea seleccionar, esta no se realiza, ya que en la busqueda, solo tiene el dato de lo digitado, pero su archivo indice tiene un campo antes que es Character, de lago 1, para mi caso, estos llevan "S" o "N", en la base y en el Xbrowse al buscar, tendria que anteponer este valor en la busqueda.

Muchos Saludos y mil gracias.

Antonio
FranciscoA wrote:Este es el código completo para las pruebas:

Code: Select all

//--------------------------------------------------------//
Function Medicos()

REQUEST DBFCDX

   DbUseArea(.T.,"DBFCDX","PROFESIO","PROFE",.F.)
   index on FIELD->Nom_Pro tag Med2 to Profesio                    
   index on FIELD->Est_Pro + FIELD->Nom_Pro tag Med3 to Profesio   
   index on FIELD->Ate_Hor + FIELD->Nom_Pro tag Med4 to Profesio   
   PROFE->(dbcloseArea())

   Activa_Profe()
RETURN NIL

//Para Cambiar Filtro del Combobox.
//-----------------------------------------//
Function Filtra_Pro(nP,oBrw)
LOCAL cVar, cVar1

   Sele Profe
   Set Order to

   Do Case
   Case nP >= 1 .and. nP <= 3
       Do Case
       Case nP == 1     //TODOS
           ORDSETFOCUS("MED2")
           Profe->(OrdScope(TOPSCOPE, NIL))
           Profe->(OrdScope(BOTTOMSCOPE, NIL))
       Case nP == 2     //SOLO VIGENTES
           ORDSETFOCUS("MED3")
           cVar  := "S"
           cVar1 := "S"
       Case nP == 3     //DESACTIVADOS
           ORDSETFOCUS("MED3")
           cVar  := "N"
           cVar1 := "N"
       EndCase
   Other        //SOLO AGENDA
       ORDSETFOCUS("MED4")
       cVar  := "S"
       cVar1 := "S"
   EndCase

   If nP#1
      Profe->(OrdScope(TOPSCOPE, cVar))
      Profe->(OrdScope(BOTTOMSCOPE, cVar1))
   Endif

   Profe->(DbGotop())
   oBrw:Refresh()

Return  .T.

//-----------------------------------------//
Function Activa_Profe()
    Local oDlg1, oBrw, oFont, oFont1,oFont2,oFont3,oFont7, oTitu1,oTitu2,aStruc,oSay1,oSay2,oGet1,oTitu3
    Local nPro:=1,  aEstado := {},Estado1:=""

    AADD( aEstado,{"TODOS        "})
    AADD( aEstado,{"SOLO VIGENTES"})
    AADD( aEstado,{"DESACTIVADOS "})
    AADD( aEstado,{"SOLO AGENDA  "})

    USE PROFESIO ALIAS "PROFE" SHARED VIA "DBFCDX"
    Set index to Profesio
    DbSetorder(2)   //"MED3"

    Profe->(DbGotop())

    DEFINE FONT oFont  NAME "TAHOMA" SIZE 0,-14
    DEFINE FONT oFont1 NAME 'TAHOMA' SIZE 0,24   BOLD
    DEFINE FONT oFont2 NAME "TAHOMA" SIZE 0,-12  BOLD
    DEFINE FONT oFont3 NAME 'TAHOMA' SIZE 0,18   BOLD
    DEFINE FONT oFont7 NAME "TAHOMA" SIZE 0,-14  BOLD

    DEFINE DIALOG oDlg1 SIZE 570,570 PIXEL FONT oFont3   STYLE nOr( WS_POPUP, WS_VISIBLE, WS_DLGFRAME )
    @ 00,35  SAY otitu1 PROMPT " MAESTRO DE PROFESIONALES " PIXEL OF oDlg1 COLORS RGB(12, 135, 27)   FONT oFont1

    @ 016,103 SAY "Seleccione"   SIZE 80,10 PIXEL OF oDlg1  RIGHT  FONT oFont1
    @ 016,190 ComboBox oGet1 Var nPro Items ArrTranspose(aEstado)[1] SIZE 70,200 PIXEL OF oDlg1  FONT oFont2;  // COLORS RGB(55, 255, 153)
              ON CHANGE ((Estado1:=ArrTranspose(aEstado)[1][oGet1:nAt]),IF(!Filtra_Pro(@nPro,oBrw),(MsgStop("TODO BIEN"),oBrw:Setfocus(),.F.), (oBrw:Refresh(),oBrw:Setfocus(), .T.) ))

    @ 30,10 XBROWSE oBrw SIZE 300,-35 PIXEL OF oDlg1 DATASOURCE "Profe" ;
            HEADERS 'Nombre del Profesional','Especialidad','Vigencia','Agenda';
            COLUMNS 'Nom_Pro','Tip_Esp','Est_Pro','Ate_Hor';
            PICTURES "@!","@!" ,"!","!";
            COLSIZES 180, 150, 120, 70;
            CELL LINES AUTOSORT NOBORDER

    WITH OBJECT oBrw
       :nMarqueeStyle  := MARQSTYLE_HIGHLROW
       :bClrHeader     := {|| { nRGB(140, 0, 0), nRGB( 231, 242, 255 ), } }
       :nHeaderHeight  := 35
       :nFreeze        := 2
       :lSeekBar       := .T.
       :lIncrFilter    := .F.
       :lSeekWild      := .T.  
       :lFooter  := .f.
       :lHScroll := .f.

       :nOpacity       := 230
       :SetStyle( 2018)
       :nColorPen      := CLR_RED

       :aCols[1]:oDataFont     := oFont7
       :aCols[1]:bClrHeader    := { || { CLR_HRED,CLR_WHITE } }       // Aplico Color a Una Columna
       :aCols[1]:oHeaderFont   :=  oFont7                  // Aplico Font a una Columna
       :aCols[3]:nDataStrAlign := AL_CENTER
       :aCols[4]:nDataStrAlign := AL_CENTER

       :CreateFromCode()
    END

    @ 253,90 BTNBMP SIZE 30, 30 PROMPT "SALIR"  OF oDlg1 PIXEL 2007  FONT oFont7 ;
            ToolTip  "SALIR DEL SISTEMA";
            ACTION oDlg1:End()

   ACTIVATE DIALOG oDlg1 CENTERED  ON INIT (oBrw:SetFocus())

   RELEASE FONT oFont,oFont1,oFont2,oFont3,oFont7
   Close all
   Ferase(".\profesio.cdx")

Return nil
 
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Ayuda Busqueda Incremental Xbrowse ???

Post by FranciscoA »

Este es el resultado del codigo ejemplo. Recuerda que no se usa lIncrFilter, solamente lSeekWild.
Image
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Ayuda Busqueda Incremental Xbrowse ???

Post by FranciscoA »

su archivo indice tiene un campo antes que es Character, de lago 1, para mi caso, estos llevan "S" o "N", en la base y en el Xbrowse al buscar, tendria que anteponer este valor en la busqueda.
Estoy de acuerdo.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: Ayuda Busqueda Incremental Xbrowse ???

Post by remtec »

Hola Fracisco,

Como siempre muchas gracias por tu ayuda y precocupacion.

No he respondido antes, ya que me he dado vueltas probando y no logro solucionar el problema, aunque tu me muestras que a ti te funciona, pues bien, este mismo codigo a mi no me funciona.

Por este motivo me he tomado la atribución de subir a este link el codigo que a ti te funciona y a mi no, pero ademas he subido el archivo con el que yo realizo las pruebas.

Que error cometo yo, estos dias no di con el problema, aunque a tu codigo la unica modificacion es agregarle las primeras lineas:

#include "FiveWin.ch"
#include "xbrowse.ch"
#DEFINE TOPSCOPE 0
#DEFINE BOTTOMSCOPE 1

Desde ya muchos Saludos.

Antonio

En este link, se encuentra el Prg y la Dbf.:

https://drive.google.com/drive/folders/ ... wsr_yvdlJJ
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Ayuda Busqueda Incremental Xbrowse ???

Post by karinha »

Mira que fácil controlar tus índices usando el comando: MEMORY/TEMPORARY no hay limitaciones.

Code: Select all

// \SAMPLES\REMTEC.PRG - Modificado en: 30/01/2020 - kapiabafwh@gmail.com

#include "FiveWin.ch"
#include "xbrowse.ch"

ANNOUNCE RDDSYS
REQUEST DBFCDX, DBFFPT

FUNCTION Medicos()

   RDDSETDEFAULT( "DBFCDX" )

   SET CENTURY ON
   SET DATE BRITISH
   SET TIME FORMAT TO "HH:MM:SS"
   SET EPOCH TO YEAR( DATE() ) - 30
   SET SOFTSEEK OFF
   SET WRAP ON
   SETCANCEL( .F. )
   SET CONFIRM OFF
   SET DELETED ON
   SET ESCAPE OFF
   SET EXACT ON
   SET EXCLUSIVE OFF
   SET MULTIPLE OFF

   Activa_Profe() // crea los indices en memoria ram, super rapido.

RETURN NIL

FUNCTION Activa_Profe()

   LOCAL oDlg1, oBrw, oFont, oFont1, oFont2, oFont3, oFont7, oTitu1, oTitu2, ;
         aStruc, oSay1, oSay2, oGet1, oTitu3
   LOCAL nPro := 1,  aEstado := {}, Estado1 := ""

   AADD( aEstado, { "TODOS        " } )
   AADD( aEstado, { "SOLO VIGENTES" } )
   AADD( aEstado, { "DESACTIVADOS " } )
   AADD( aEstado, { "SOLO AGENDA  " } )

   USE PROFESIO NEW SHARED ALIAS PROFE
   GO TOP

   DEFINE FONT oFont  NAME "TAHOMA" SIZE 0, - 14
   DEFINE FONT oFont1 NAME 'TAHOMA' SIZE 0,   24 BOLD
   DEFINE FONT oFont2 NAME "TAHOMA" SIZE 0, - 12 BOLD
   DEFINE FONT oFont3 NAME 'TAHOMA' SIZE 0,   18 BOLD
   DEFINE FONT oFont7 NAME "TAHOMA" SIZE 0, - 14 BOLD

   DEFINE DIALOG oDlg1 SIZE 570, 570 PIXEL FONT oFont3                       ;
          STYLE nOr( WS_POPUP, WS_VISIBLE, WS_DLGFRAME )

   @ 00, 35  SAY otitu1 PROMPT " MAESTRO DE PROFESIONALES " PIXEL OF oDlg1   ;
      COLORS RGB( 12, 135, 27 )   FONT oFont1

   @ 016, 103 SAY "Seleccione" SIZE 80, 10 PIXEL OF oDlg1 RIGHT FONT oFont1

   @ 016, 190 ComboBox oGet1 Var nPro Items ArrTranspose( aEstado )[1]       ;
      SIZE 70, 200 PIXEL OF oDlg1  FONT oFont2 ;
      ON CHANGE ( ( Estado1 := ArrTranspose(aEstado )[1][oGet1:nAt] ),       ;
         IF( !Filtra_Pro(@nPro,oBrw ),(MsgStop("TODO BIEN" ),                ;
            oBrw:Setfocus(), .F. ), (oBrw:Refresh(),oBrw:Setfocus(), .T. ) ) )

   @ 30, 10 XBROWSE oBrw SIZE 300, - 35 PIXEL OF oDlg1 DATASOURCE "Profe"    ;
      HEADERS 'Nombre del Profesional', 'Especialidad', 'Vigencia', 'Agenda' ;
      COLUMNS 'Nom_Pro', 'Tip_Esp', 'Est_Pro', 'Ate_Hor'                     ;
      PICTURES "@!", "@!" , "!", "!"                                         ;
      COLSIZES 180, 150, 120, 70                                             ;
      CELL LINES AUTOSORT NOBORDER

   WITH OBJECT oBrw
      :nMarqueeStyle  := MARQSTYLE_HIGHLROW
      :bClrHeader     := {|| { nRGB( 140, 0, 0 ), nRGB( 231, 242, 255 ), } }
      :nHeaderHeight  := 35
      :nFreeze        := 2
      :lSeekBar       := .T.
      :lIncrFilter    := .F.
      :lSeekWild      := .T.
      :lFooter  := .F.
      :lHScroll := .F.

      :nOpacity       := 230
      :SetStyle( 2018 )
      :nColorPen      := CLR_RED

      :aCols[1]:oDataFont     := oFont7
      :aCols[1]:bClrHeader    := { || { CLR_HRED,CLR_WHITE } } // Aplico Color a Una Columna
      :aCols[1]:oHeaderFont   :=  oFont7                       // Aplico Font a una Columna
      :aCols[3]:nDataStrAlign := AL_CENTER
      :aCols[4]:nDataStrAlign := AL_CENTER

      :CreateFromCode()
   END

   @ 253, 90 BTNBMP SIZE 30, 30 PROMPT "SALIR"  OF oDlg1 PIXEL 2007  ;
      FONT oFont7 ToolTip  "SALIR DEL SISTEMA" ACTION oDlg1:End()

   ACTIVATE DIALOG oDlg1 CENTERED  ON INIT ( oBrw:SetFocus() )

   RELEASE FONT oFont, oFont1, oFont2, oFont3, oFont7

   CLOSE

RETURN nil

//-> Para Cambiar Filtro del Combobox.
FUNCTION Filtra_Pro( nP, oBrw )

   SELE Profe // USANDO COMANDO MEMORY/TEMPORARY - MUI BUENO E FACIL.

   DO CASE
   CASE nP >= 1 .AND. nP <= 3

      DO CASE
      CASE nP == 1     // TODOS

         INDEX ON FIELD->Nom_Pro TAG MED2 TO ARCHTEMP MEMORY

      CASE nP == 2     // SOLO VIGENTES

         INDEX ON FIELD->Est_Pro + FIELD->Nom_Pro TAG Med3 TO ARCHTEMP ;
            FOR FIELD->Est_Pro = "S" MEMORY

      CASE nP == 3     // DESACTIVADOS

         INDEX ON FIELD->Ate_Hor + FIELD->Nom_Pro TAG Med4 TO ARCHTEMP ;
            FOR FIELD->Ate_Hor = "N" MEMORY

      ENDCASE

      OTHERWISE        // SOLO AGENDA

      INDEX ON FIELD->Ate_Hor + FIELD->Nom_Pro TAG Med5 TO ARCHTEMP    ;
         FOR FIELD->Ate_Hor = "S" MEMORY

   ENDCASE

   GO TOP

   oBrw:Refresh()

RETURN  .T.

// FIN - kapiabafwh@gmail.com - I love FiveWin the best.
 
Saludos.
João Santos - São Paulo - Brasil
Post Reply