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