Busqueda Incremental en Xbrowse Lenta en Red "URGENTE"

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

Busqueda Incremental en Xbrowse Lenta en Red "URGENTE"

Post by remtec »

Hola Amigos.

Tengo un tremendo problema, me ha pedido que instale en una red Novell, un sistema que estaba en disco local, funcionando bien, pero la busqueda Incremental en Xbrowse en Red, se ha enlentesido demaciado y me han reclamado y pedido solucion:

La Dbf contiene 350 registro y para ello el Xbrowse uso indices Temporales:
INDEX ON FIELD->Est_Pro + FIELD->Nom_Doc TAG Med3 TO ARCHTEMP FOR FIELD->Est_Pro = "S" MEMORY
Como podria corregir este problema, ya que el requerimiento de a busqueda es que vaya filtrando el Xbrowse y mostrando solo lo que cumple con lo digitado.

Quedo atento a sus comentarios.

Muchas gracias y saludos,

Antonio

Dejo el codigo:

Code: Select all

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

REQUEST HB_LANG_ESWIN
REQUEST HB_CODEPAGE_ESWIN // Para establecer código de página a Español (Ordenación, etc..)

Static  cSeek:="",oSeek
Function Activa_Profe()
    Local oDlg1, oBrw, oFont1,oFont2, oTitu1,oTitu2,oFont3,aStruc,oSay1,oSay2,oGet1,oFont4,oFont5,oTitu3
        Local nPro:=2,  aEstado := {},Estado1:=""
        SET ESCAPE OFF

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




        Abre_dbf("Profesi1",1,.f.,"Profe")
    INDEX ON FIELD->Est_Pro + FIELD->Nom_Doc TAG Med3 TO ARCHTEMP ;
          FOR FIELD->Est_Pro = "S" MEMORY

        *cAlias1="Profe"
     *(cAlias1)->(OrdScope(TOPSCOPE, cVar1))
     *(cAlias1)->(OrdScope(BOTTOMSCOPE, cVar1))
     ORDSETFOCUS("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 580,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

     @ 018,103 SAY "Seleccione"   SIZE 80,10 PIXEL OF oDlg1  RIGHT  FONT oFont1
     @ 018,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_Pro1(@nPro,oBrw,@cSeek),(MsgStop("TODO BIEN"),oBrw:Setfocus(),.F.), (oBrw:Refresh(),oBrw:Setfocus(), .T.) ))


     @ 45,10 XBROWSE oBrw SIZE 300,-35 PIXEL OF oDlg1 DATASOURCE "Profe" ;
            HEADERS 'Nombre del Profesional','Especialidad','Vigencia','Agenda';
            COLUMNS 'Nom_Doc','Tip_Esp','Est_Pro','Ate_Hor';
            PICTURES "@!","@!" ,"!","!";
            COLSIZES 310, 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:= .F.

                                 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   := .T.
                             oBrw:lSeekWild     := .T.                   &&  .T. Busca Contenido, .F. Que comience con lo que digita
                                 oBrw:Seek("")
                                 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:Seek( "" ), oBrw:GoTop(), oBrw:SetFocus() }      // Permite Seleccionar Sobre una Celda y Posicionarse en el 1º

                                            //:bLDClickData  := { || Cambia_Esta(),oBrw:Seek( "" ),  oBrw:SetFocus() }      // Permite Seleccionar Sobre una Celda y Mantener el foco

                                 END WITH

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

                                END WITH


                                  oBrw:CreateFromCode()

   @ 35,10 SAY otitu3 PROMPT "Buscar : "  PIXEL OF oDlg1 COLORS RGB(12, 135, 27)   FONT oFont7

     @ 35,40 SAY oBrw:oSeek  VAR oBrw:cSeek SIZE 100,10 PIXEL OF oDlg1 PICTURE "@X" FONT oFont7 COLOR CLR_HRED,CLR_YELLOW

     @ 032,250 BTNBMP SIZE 40, 10 PROMPT "LIMPIAR"  OF oDlg1 PIXEL 2007  FONT oFont7 ;
            ToolTip  "LIMPIAR BUSQUEDA";
            ACTION ( oBrw:Seek( "" ), oBrw:GoTop(), oBrw:SetFocus() )


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


   ACTIVATE DIALOG oDlg1 CENTERED ON INIT ( oBrw:cSeek( "" ), oBrw:SetFocus(), .F. )


     RELEASE FONT oFont,oFont1,oFont7,oFont3,oFont2

     Close all

     Return nil

Function Cambia_Esta()
        Sele Profe
        If Est_Pro=="S"
            mensa="** DESACTIVADO **"
            Est:="N"
        Else
            Est:="S"
            mensa="** ACTIVADO **"
        Endif
        Do While .t.
             If Rlock()
                    Repl Est_Pro With Est
                    DbCommit()
                    DbUnlock()
                    MsgInfo( "* Prof. "+Trim(Nom_Doc)+"  ** "+CRLF+CRLF+mensa )

                    Exit
             Endif
        Enddo
        Return .t.

Function Cambia_Agen()
        Sele Profe
        If Ate_Hor=="S"
            mensa="** ATIENDE POR ORDEN DE LLEGADA **"
            Age:="N"
        Else
            mensa="** ATIENDE CON AGENDA **"
            Age:="S"
        Endif
        Do While .t.
             If Rlock()
                    Repl Ate_Hor With Age
                    DbCommit()
                    DbUnlock()
                    MsgInfo( "* Prof. "+Trim(Nom_Doc)+"  ** "+CRLF+CRLF+mensa )
                    Exit
             Endif
        Enddo
        Return .t.

Function Filtra_Pro(nP,oBrw)
         Sele Profe
         Set Filter to

         Do Case
                        Case nP >= 1 .and. nP <= 3
                                Do Case
                                        Case nP == 1
                                             // Set Filter To
                                            ORDSETFOCUS("MED2")
                                        Case nP == 2
                                             // Set Filter To Est_Pro=="S"
                                                ORDSETFOCUS("MED3")
                                        Case nP == 3
                                                //Set Filter To Est_Pro#"S"
                                                ORDSETFOCUS("MED4")

                             EndCase
                        Other
                                        //Set Filter to  Ate_Hor == "S"
                                        ORDSETFOCUS("MED5")
            EndCase
            DbGotop()
        oBrw:Update()
        oBrw:Refresh()

            Return  .T.

//-> Para Cambiar Filtro del Combobox.
FUNCTION Filtra_Pro1( nP, oBrw ,cSeek)
     cSeek:=""
   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_Doc TAG Med3 TO ARCHTEMP ;
            FOR FIELD->Est_Pro = "S" MEMORY

      CASE nP == 3     // DESACTIVADOS

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

      ENDCASE

      OTHERWISE        // SOLO AGENDA

      INDEX ON FIELD->Ate_Hor + FIELD->Nom_Doc TAG Med5 TO ARCHTEMP    ;
         FOR FIELD->Ate_Hor = "S" .and. FIELD->Est_Pro = "S" MEMORY

   ENDCASE
   DbGotop()
     oBrw:cSeek( "" )
   oBrw:Update()
   oBrw:Refresh()
RETURN  .T.


 
Last edited by remtec on Tue May 05, 2020 5:52 pm, edited 2 times in total.
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Busqueda Incremental en Xbrowse Lenta en Red

Post by karinha »

Code: Select all

// FWH...\SAMPLES\REMTEC.PRG - kapiabafwh@gmail.com

#Include "FiveWin.ch"
#Include "xbrowse.ch"

#define TOPSCOPE        0
#define BOTTOMSCOPE     1

REQUEST HB_LANG_ESWIN
REQUEST HB_CODEPAGE_ESWIN // Para establecer código de página a Español (Ordenación, etc..)

STATIC  cSeek := "", oSeek

FUNCTION Activa_Profe()

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

   SET ESCAPE OFF

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

   Abre_dbf( "Profesi1", 1, .F. , "Profe" )

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

   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 580, 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

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

   @ 018, 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_Pro1(@nPro,oBrw,@cSeek ),(MsgStop("TODO BIEN" ),        ;
         oBrw:Setfocus(), .F. ), (oBrw:Refresh(),oBrw:Setfocus(), .T. ) ) )

   @ 45, 10 XBROWSE oBrw SIZE 300, - 35 PIXEL OF oDlg1 DATASOURCE "Profe"   ;
      HEADERS 'Nombre del Profesional', 'Especialidad', 'Vigencia', 'Agenda';
      COLUMNS 'Nom_Doc', 'Tip_Esp', 'Est_Pro', 'Ate_Hor'                    ;
      PICTURES "@!", "@!" , "!", "!"                                        ;
      COLSIZES 310, 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 := .F.
   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   := .T.
   oBrw:lSeekWild     := .T.                   //  .T. Busca Contenido, .F. Que comience con lo que digita
   oBrw:Seek( "" )
   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:Seek( "" ), oBrw:GoTop(), oBrw:SetFocus() }      // Permite Seleccionar Sobre una Celda y Posicionarse en el 1º

   END WITH

   WITH OBJECT oBrw:Agenda

      :bLDClickData  := { || Cambia_Agen(), oBrw:Refresh() }

   END WITH

   oBrw:CreateFromCode()

   @ 35, 10 SAY otitu3 PROMPT "Buscar : " PIXEL OF oDlg1              ;
      COLORS RGB( 12, 135, 27 )   FONT oFont7

   @ 35, 40 SAY oBrw:oSeek VAR oBrw:cSeek SIZE 100, 10 PIXEL OF oDlg1 ;
      PICTURE "@X" FONT oFont7 COLOR CLR_HRED, CLR_YELLOW

   @ 032, 250 BTNBMP SIZE 40, 10 PROMPT "LIMPIAR" OF oDlg1 PIXEL 2007 ;
      FONT oFont7 ToolTip  "LIMPIAR BUSQUEDA"                         ;
      ACTION ( oBrw:Seek( "" ), oBrw:GoTop(), oBrw:SetFocus() )

   @ 253, 90 BTNBMP oBtn SIZE 30, 30 PROMPT "VOLVER" OF oDlg1 PIXEL 2007 ;
      Resource "#8002"  FONT oFont7 ToolTip  "VOLVER AL MENU"         ;
      ACTION( oDlg1:End() )

   oBtn:lCancel := .T.

   ACTIVATE DIALOG oDlg1 CENTERED ;
      ON INIT ( oBrw:cSeek( "" ), oBrw:SetFocus(), .F. )

   RELEASE FONT oFont, oFont1, oFont7, oFont3, oFont2

   CLOSE ALL

RETURN nil

FUNCTION Cambia_Esta()

   LOCAL Mensa, Est

   SELE Profe

   IF Est_Pro == "S"

      mensa = "** DESACTIVADO **"

      Est := "N"

   ELSE

      Est := "S"

      mensa = "** ACTIVADO **"

   ENDIF

   DO WHILE .T.  //??? Porque??

      SYSREFRESH()

      IF Rlock()

         REPL Est_Pro WITH Est

         DbCommit()

         MsgInfo( "* Prof. " + Trim( Nom_Doc ) + "  ** " + CRLF + CRLF + mensa )

         EXIT

      ENDIF

   ENDDO

   DbUnlock()

RETURN .T.

FUNCTION Cambia_Agen()

   LOCAL Mensa

   SELE Profe

   IF Ate_Hor == "S"

      mensa = "** ATIENDE POR ORDEN DE LLEGADA **"

      Age := "N"

   ELSE

      mensa = "** ATIENDE CON AGENDA **"

      Age := "S"

   ENDIF

   DO WHILE .T.  // ??? Porque?

      SYSREFRESH()

      IF Rlock()

         REPL Ate_Hor WITH Age

         DbCommit()

         MsgInfo( "* Prof. " + Trim( Nom_Doc ) + "  ** " + CRLF + CRLF + mensa )

         EXIT

      ENDIF

   ENDDO

   DbUnlock()

RETURN .T.

FUNCTION Filtra_Pro( nP, oBrw )

   SELE Profe

   SET FILTER TO

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

      DO CASE
      CASE nP == 1

         // Set Filter To
         ORDSETFOCUS( "MED2" )

      CASE nP == 2

         // Set Filter To Est_Pro=="S"
         ORDSETFOCUS( "MED3" )

      CASE nP == 3
         //Set Filter To Est_Pro#"S"
         ORDSETFOCUS( "MED4" )

      ENDCASE

   OTHER

      //Set Filter to  Ate_Hor == "S"
      ORDSETFOCUS( "MED5" )

   ENDCASE

   DbGotop()
   oBrw:Update()
   oBrw:Refresh()

RETURN  .T.

//-> Para Cambiar Filtro del Combobox.

FUNCTION Filtra_Pro1( nP, oBrw , cSeek )

   cSeek := ""

   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_Doc TAG Med3 TO ARCHTEMP ;
            FOR FIELD->Est_Pro = "S" MEMORY

      CASE nP == 3     // DESACTIVADOS

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

      ENDCASE

   OTHERWISE        // SOLO AGENDA

      INDEX ON FIELD->Ate_Hor + FIELD->Nom_Doc TAG Med5 TO ARCHTEMP    ;
         FOR FIELD->Ate_Hor = "S" .AND. FIELD->Est_Pro = "S" MEMORY

   ENDCASE

   DbGotop()

   oBrw:cSeek( "" )
   oBrw:Update()
   oBrw:Refresh()

RETURN  .T.

// FIN
 
Saludos.
João Santos - São Paulo - Brasil
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: Busqueda Incremental en Xbrowse Lenta en Red

Post by remtec »

Hola Karinha

Muy buen dia.

Muchas gracias por tu atención y ayuda.

En relación a tu consulta marcada en los Do While de grabacion, en red siempre lo he usado asi, esta en el While mientra no pueda bloquear el archivo y grabar la actualización. En pocas palabras mientras otros usuarios lo esten usando yo espero hasta mi turno.

Debe existir otra lógica y pienso que mejor, pero a mi me ha funcionado esto.

Veo que le has agregado un SYSREFRESH() y sacado el DbUnlock(), que tenia en la grabación ?

Mi problema en cuestión es que para la búsqueda en los Xbrowse, me han pedido pedido que vaya filtrando y mostrando o dejando en la lista, solo lo que coincide con lo digitado, esto en equipo local, funciona muy bien, pero en red, esto ya no funciona como se requiere, es muy lento.

Lamentablemente necesito solucionar este problema en forma urgente.

En espera de su ayuda, les saluda muy agradecido,

Antonio


Tu observacion:

Code: Select all

 

// Aqui entro y me mantengo en Do While, mientras el archivo este ocupado por otro usuario.
DO WHILE .T.  // ??? Porque?

      SYSREFRESH()

      IF Rlock()

         REPL Ate_Hor WITH Age

         DbCommit()

         MsgInfo( "* Prof. " + Trim( Nom_Doc ) + "  ** " + CRLF + CRLF + mensa )

         EXIT

      ENDIF

   ENDDO

 
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Busqueda Incremental en Xbrowse Lenta en Red

Post by karinha »

Code: Select all

   cAlias := ALIAS()

   // Aqui entro y me mantengo en Do While, mientras el archivo este ocupado por otro usuario.
   DO WHILE .T.  // ??? Porque?

      SYSREFRESH()

      IF Rlock()

         REPL Ate_Hor WITH Age

         DbCommit()

         MsgInfo( "* Prof. " + Trim( Nom_Doc ) + "  ** " + CRLF + CRLF + mensa )

         EXIT

      ELSE

         MsgStop( "IMPOSSIBLE ABRIR BANCO DE DATOS: " + cAlias + CRLF + ;
                  "BLOQUEADO POR OTRO(s) USUARIO(s).  " ),              ;
                  "ERRO FATAL DE RED! INTENTE DE NUEVO" )

         EXIT

      ENDIF

   ENDDO
 
Saludos.
João Santos - São Paulo - Brasil
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: Busqueda Incremental en Xbrowse Lenta en Red

Post by remtec »

karinha wrote:

Code: Select all

   cAlias := ALIAS()

   // Aqui entro y me mantengo en Do While, mientras el archivo este ocupado por otro usuario.
   DO WHILE .T.  // ??? Porque?

      SYSREFRESH()

      IF Rlock()

         REPL Ate_Hor WITH Age

         DbCommit()

         MsgInfo( "* Prof. " + Trim( Nom_Doc ) + "  ** " + CRLF + CRLF + mensa )

         EXIT

      ELSE

         MsgStop( "IMPOSSIBLE ABRIR BANCO DE DATOS: " + cAlias + CRLF + ;
                  "BLOQUEADO POR OTRO(s) USUARIO(s).  " ),              ;
                  "ERRO FATAL DE RED! INTENTE DE NUEVO" )

         EXIT

      ENDIF

   ENDDO
 
Saludos.
Hola Karinha

Muchas gracias por responder.

Con esta solución, corrigo el bloqueo al grabar el datos.

El motivo principal de mi problema, sigue siendo la busqueda incremental, he probado y se demora en mostrar _ digitados y despues la lista de coincidencias en el Xbrowse.

Para complicar las cosas, uso muchos xbrowse y todos presentan el mismo problema, compromete a todo mi sistema.

En espera de comentarios, les saluda muy atte.

Antonio
User avatar
jvtecheto
Posts: 357
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: Busqueda Incremental en Xbrowse Lenta en Red

Post by jvtecheto »

Hola Remtec.

Como veo que utilizas indices .CDX porque no pruebas a usar Scopes

pega un vistazo al fichero ord.ch

era algo asi. ,pero mira mejor el fichero ch

Code: Select all

SET SCOPETOP TO "cCondicion"
SET SCOPEBOTTOM TO "cCondicion"
// o utilizando funciones 
OrdScope( TOPSCOPE, cCondicion ) 
OrdScope( BOTTOMSCOPE, cCondicion )
 
Saludos.

Jose.
Fwh 19.06 32 bits + Harbour 3.2dev(r2011030937)+ Borland 7.4 + FivEdit
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: Busqueda Incremental en Xbrowse Lenta en Red

Post by remtec »

jvtecheto wrote:Hola Remtec.

Como veo que utilizas indices .CDX porque no pruebas a usar Scopes

pega un vistazo al fichero ord.ch

era algo asi. ,pero mira mejor el fichero ch

Code: Select all

SET SCOPETOP TO "cCondicion"
SET SCOPEBOTTOM TO "cCondicion"
// o utilizando funciones 
OrdScope( TOPSCOPE, cCondicion ) 
OrdScope( BOTTOMSCOPE, cCondicion )
 
Saludos.

Jose.
Hola José

Muchas gracias por responder.

La verdad q inicialmente usé OrdScope, de ahí a los índices temporales, si ves en el código, tengo anulado su uso, estás 2 opciones no puedo mejorar la velocidad de la búsqueda y me tiene muy complicado, ya q un sistema en proceso activo, q fue afectado al instalarlo e red.

Espero poder conseguir la solución.

Muchos saludos

Antonio.
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Busqueda Incremental en Xbrowse Lenta en Red

Post by cnavarro »

Antonio
1.- Son índices con claves compuestas los que utilizas? ( por curiosidad )
2.- Prueba desactivando esto
oBrw:lIncrFilter := .F.
oBrw:lSeekWild := .F.
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
acuellar
Posts: 1312
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Busqueda Incremental en Xbrowse Lenta en Red

Post by acuellar »

Antonio

Como indica Cristobal Al estar activados es para búsqueda incremental con filtrado de lo que se va escribiendo y siempre será lento.

Pero si se quiere buscar de forma incremental desdes el primer caracter deben estar desactivados y se aconseja usar OrdScope

Si utilizas indices temporales o de memoria éstos deben ser sólo para consultas momentáneas. Porque si otro usuario modifica algún registro, los indices temporales no se actualizan.
Saludos,

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

Re: Busqueda Incremental en Xbrowse Lenta en Red

Post by remtec »

cnavarro wrote:Antonio
1.- Son índices con claves compuestas los que utilizas? ( por curiosidad )
2.- Prueba desactivando esto
oBrw:lIncrFilter := .F.
oBrw:lSeekWild := .F.
Hola Cristobal

Muchas gracias por responder.

He modificado el uso de indices, de Temporal a permanente y los defino asi:
inde on FIELD->Cod_Pro tag Med1 to Profesi1
inde on FIELD->Nom_Doc tag Med2 to Profesi1 // Todos Por Nombre
inde on FIELD->Nom_Doc tag Med3 to Profesi1 FOR FIELD->Est_Pro = "S" // Vigentes
inde on FIELD->Nom_Doc tag Med4 to Profesi1 FOR FIELD->Est_Pro # "S" // Desactivados
inde on FIELD->Nom_Doc tag Med5 to Profesi1 FOR FIELD->Ate_Hor = "S" .and. FIELD->Est_Pro = "S" // Vigentes con Agenda

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

Re: Busqueda Incremental en Xbrowse Lenta en Red

Post by remtec »

acuellar wrote:Antonio

Como indica Cristobal Al estar activados es para búsqueda incremental con filtrado de lo que se va escribiendo y siempre será lento.

Pero si se quiere buscar de forma incremental desdes el primer caracter deben estar desactivados y se aconseja usar OrdScope

Si utilizas indices temporales o de memoria éstos deben ser sólo para consultas momentáneas. Porque si otro usuario modifica algún registro, los indices temporales no se actualizan.
Hola Adhemar C.

Muchas gracias por tu ayuda.

Efectivamente necesito por requerimiento, que la busqueda incremental sea lo contenido al digitar y no por inicio, , esta finalidad es que vaya dejando en el Xbrowse solo aquellos registros que contengan solo lo digitado.

Ahora he modificado mi código y generado los archivos indices permanentes, asumiendo que se actualicen si algún usuario realiza una modificación. Estos son generados condicionalmente según necesito:
inde on FIELD->Cod_Pro tag Med1 to Profesi1
inde on FIELD->Nom_Doc tag Med2 to Profesi1 // Todos Por Nombre
inde on FIELD->Nom_Doc tag Med3 to Profesi1 FOR FIELD->Est_Pro = "S" // Vigentes
inde on FIELD->Nom_Doc tag Med4 to Profesi1 FOR FIELD->Est_Pro # "S" // Desactivados
inde on FIELD->Nom_Doc tag Med5 to Profesi1 FOR FIELD->Ate_Hor = "S" .and. FIELD->Est_Pro = "S" // Vigentes con Agenda

Además, creo q si defino los archivos de esta forma, no necesito usar los OrdScope, que me indicas. No se si tengo la razón, me gustaria que algún maestros me indique si estoy equivocado.

Por lo que entiendo de tu comentario, el filtro de Xbrowse, sería el que produce la lentitud, de ser así, tengo un gran problema, ya que por requerimiento del cliente, la busqueda debe ser incremental por contenido, pero que sea rápido.

La pregunta del Millón, como soluciono mi problema.

Saludos
Antonio.
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Busqueda Incremental en Xbrowse Lenta en Red

Post by cnavarro »

Antonio, no me has dicho si has probado esto
oBrw:lIncrFilter := .F.
oBrw:lSeekWild := .F.
y el comportamiento que tiene asi
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: Busqueda Incremental en Xbrowse Lenta en Red

Post by remtec »

cnavarro wrote:Antonio, no me has dicho si has probado esto
oBrw:lIncrFilter := .F.
oBrw:lSeekWild := .F.
y el comportamiento que tiene asi
Hola Cristobal,

Muchas gracias por tu ayuda.

Disculpa no responder antes, hoy recien pude tener acceso al lugar donde tengo instalado el sistema en red.

Lamentablemente, aun aplicando lo que recomiendas, la lentitud es la misma, tarda en mostrar lo digitado y mostrar la lista de coincidencias.

Me es de suma urgencia poder dar una solucion, es definitivamente al correr el sistema en red, si lo pongo en un pc local, es muy rapido.

En espera de tus comentarios,

Saluda atte.

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

Re: Busqueda Incremental en Xbrowse Lenta en Red "URGENTE"

Post by remtec »

Estimados Maestros.

Debido a mi urgencia.

Le he revisado y probado Xbrowse en Red.

Lamentablemente, los mismos comentarios y problemas publicados en el foro anteriormente, siguen presentandose, todo mi sistema con DBF y CDX, esta basado en el uso de Xbrowse, todo lo que funciona velozmente en equipo local, al correrlo en Red, como fue requerido este cambio, se vuelve enormemente Lento, he realizado pruebas aplicando Indices Temporales o OrdScope y el resultado es el mismo,me queda claro que esto ha sido un caso sin solucion, como Xbrowse con uso de DBF en red es muy lento, me veo obligado a cambiar Dbf por Array, agregando tiempos de carga segun filtro requerido.

Si algun maestros tiene alguna sugerencia que me ayude, estare como siempre muy agradecido.

Saludos

Antonio.
MOISES
Posts: 824
Joined: Wed Aug 22, 2007 10:09 am

Re: Busqueda Incremental en Xbrowse Lenta en Red "URGENTE"

Post by MOISES »

Hola:

¿La lentitud es en la carga del xBrowse o en las búsquedas?
Saludos / Regards,

FWH 20.04, Harbour 3.2.0 dev (r1909261630) y BCC 7.40
Post Reply