¿Cómo hago una búsqueda incremental en xBrowse?

¿Cómo hago una búsqueda incremental en xBrowse?

Postby JoseAlvarez » Fri Oct 22, 2021 8:26 pm

Saludos amigos del foro fivewin.

Tengo un listbox con xbrowse a partir de un arreglo de memoria. Quiero hacer una búsqueda incremental sobre la primera columna que es tipo alfanumerico.

Me gustaria hacerla a medida que se va escribiendo en un campo GET.

De verdad no tengo idea de como se hace y lo que he visto en los posts del foro no lo he podido implementar porque no es mucho lo que logro entender.

Alguien que me de la mano?

Gracias adelantadas ...
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 798
Joined: Sun Nov 09, 2014 5:01 pm

Re: ¿Cómo hago una búsqueda incremental en xBrowse?

Postby cnavarro » Fri Oct 22, 2021 9:35 pm

Jose, busca en el foro AUTOSORT ( para activar la búsqueda ) y también oSeek ( para ir viendo lo que tecleas ), hay muchos ejemplos
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: ¿Cómo hago una búsqueda incremental en xBrowse?

Postby JoseAlvarez » Fri Oct 22, 2021 10:09 pm

Hola cristobal

Sí, ya vi eso que me dices, y he trarado de implementarlo, pero no se de que se trata ni cual es su funcion, y ponerlos a ciegas e ir desubriendo por ensayo y error cuando, donde y para que aplicarlas pues, es muy cuesta arriba.
Igual sigo intentando...

Gracias amigo ¡
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 798
Joined: Sun Nov 09, 2014 5:01 pm

Re: ¿Cómo hago una búsqueda incremental en xBrowse?

Postby cnavarro » Fri Oct 22, 2021 11:18 pm

Jose, haz un pequeño ejemplo sobre el que trabajar y lo vamos "arreglando", es realmente sencillo
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: ¿Cómo hago una búsqueda incremental en xBrowse?

Postby JoseAlvarez » Fri Oct 22, 2021 11:24 pm

Ok cristobal,

Voy a poner el que estoy haciendo, esta muy basico
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 798
Joined: Sun Nov 09, 2014 5:01 pm

Re: ¿Cómo hago una búsqueda incremental en xBrowse?

Postby karinha » Fri Oct 22, 2021 11:29 pm

José: Simples, Mira:

Code: Select all  Expand view  RUN

STATIC nOpcRadioBusq := 1 // Por Nombre del Cliente

FUNCTION JOSE_XBRW()

   LOCAL cAlias

   USE JOSE INDEX JOSE NEW ALIAS JOSE
   GO TOP

   cAlias := ALIAS()

   // RadioButtons...

   // Lisbox...

   // BUTTON Y ACTION:

   // etc...

   JOSE_CAMBIA_INDICE_XBRW( nOpcRadioBusq, cAlias, oLbx )

RETURN NIL

FUNCTION JOSE_CAMBIA_INDICE_XBRW( nOpcRadioBusq, cAlias, oLbx )

   LOCAL oDlg, oFont, oBrw, oSay, DBPESQ, cIndice, oSaida, nRecno, cResName
   LOCAL nKey := VK_ESCAPE, nColuna := 1, nProposta, aGrad, oBmp

   cResName := "LUPA2"

   IF nOpcRadioEnde == 4 //-> Por Endereco

      DbSelectArea( cAlias )    
      SET ORDER TO 05

      cIndice := OemToAnsi( "Endere‡o" )

      nColuna := 4

   ELSEIF nOpcRadioEnde == 3 //-> Por Cod Cliente

      DbSelectArea( cAlias )    
      SET ORDER TO 03

      cIndice := OemToAnsi( "C¢d. Cliente" )

      nColuna := 2

   ELSEIF nOpcRadioEnde == 2 //-> Por Proposta PROPOCOD

      DbSelectArea( cAlias )    
      SET ORDER TO 01

      cIndice := "Cod. Proposta"

      nColuna := 1

   ELSEIF nOpcRadioEnde == 1 //-> Por Nome CLIENTE

      DbSelectArea( cAlias )    
      SET ORDER TO 04

      cIndice := "Nome Cliente"

      nColuna := 3

   ENDIF

   GO TOP

   // Swap it to descending - Trocar para descendente
   SET DESCENDING OFF

   GO TOP

   DBPESQ := ALIAS()

   aGrad := { { 0.30, CLR_WHITE, CLR_WHITE },{ 0.50, CLR_WHITE, CLR_WHITE } }

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0, -14
                      //   800, 455(Altura)
   DEFINE DIALOG oDlg SIZE 1000, 500 PIXEL FONT oFont                        ;
      TITLE "PLENOIND: PESQUISA INCREMENTAL - Digite o Que Deseja Procurar"  ;
      GRADIENT aGrad

   oDlg:lHelpIcon := .F.
   oDlg:nSeeThroClr := 1

   /*
   @ 30, 10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg                          ;
      DATASOURCE "DBPESQ" AUTOCOLS AUTOSORT CELL LINES NOBORDER              ;
      HEADERS "Código:", "Nome:", "Endereço:", "Fantasia:", "Cnpj:", "Cpf:"  ;
      FIELDS ( cAlias )->CLIENCOD, ( cAlias )->CLIENTE, ( cAlias )->END_FAT, ;
             ( cAlias )->FANTASIA, ( cAlias )->CGC, ( cAlias )->CPF
   */


   @ 30,10 XBROWSE oBrw SIZE -10, -10 PIXEL OF oDlg                          ;
      DATASOURCE "DBPESQ" AUTOCOLS AUTOSORT CELL LINES NOBORDER              ;
      HEADERS "Proposta:", "Código:", "Nome:", "Endereço:", "Bairro:", "Cep:", "Uf:" ;
      FIELDS ( cAlias )->PROPOCOD, ( cAlias )->CLIENCOD,  ( cAlias )->CLIENTE,   ;
             ( cAlias )->END_PROP, ( cAlias )->BAIR_PROP, ( cAlias )->CEP_PROP,  ;
             ( cAlias )->CID_PROP, ( cAlias )->UF_PROP

   oBrw:cTooltip :={ "Click Para Pegar",                                     ;
                     "DADOS DO CLIENTE", 1, CLR_WHITE, CLR_HBLUE }

   // BACKGROUND 'ARANHA'

   // oBrw:RefreshCurrent()
   oBrw:l2007             := .F.
   oBrw:lFlatStyle        := .T.  // ??
   oBrw:SetFont( oFont )
   // oBrw:nHeaderLines        := 3
   // oBrw:nDataLines          := 3
   // oLbx:nColAct := 2     // Onde o Cursor Vai Iniciar na coluna wbrowse.prg
   oBrw:nColSel := nColuna // <n>  // Mister Nages - Perfect. Cursor inicia na xBrowse()
   /*
   oBrw:bClrSel = { || { CLR_WHITE, RGB( 0x33, 0x66, 0xCC ) } }
   cClrBack = Eval( oBrw:bClrSelFocus )[ 2 ]
   oBrw:bClrSelFocus = { || { CLR_WHITE, cClrBack } }
   oBrw:SetColor( CLR_BLACK, RGB( 232, 255, 232 ) )
   oCol:bLDClickData := { || Shellexecute( 0, "Open", oCol:Value ) }
   */


//   BrwColors( oBrw )

   WITH OBJECT oBrw

      oBrw:aCols[ 1 ]:nWidth := 60
      oBrw:lFlatStyle    := .T.

      // oBrw:lSeekBar := .T.
      // oBrw:lGetbar  := .T.
      oBrw:lIncrFilter := .T. // Liga o Filtro incremental
      oBrw:lSeekWild   := .T. // Liga a busca incremental
      // viewtopic.php?f=3&t=38397
      // Disable xbrowse search
      // oBrw:bSeek := { |c| .F. }

      oBrw:bKeyDown   := { |nKey| If( nKey == VK_RETURN, ( oDlg:End() ), nil ) }
      oBrw:bKeyChar   := { |nKey| If( nKey == VK_ESCAPE, ( oBrw:Seek( "" ), oDlg:End() ), nil ) }
      oBrw:bLDblClick    := { || cSeek := oBrw:aRow[ 2 ], oDlg:End() }

      oBrw:AutoFit() // Auto ajuste / ajuste automatico do xBrowse()
      // oBrw:cFilterFld := "END_PROP" // SE EU QUISER SOMENTE ENDERECO
      // oBrw:bClrEdits := { || { CLR_BLACK, CLR_YELLOW } }

      oBrw:CreateFromCode()

   END

   @ 10, 055 SAY "Digite o Que Deseja Procurar: " SIZE 120, 10 PIXEL OF oDlg ;
      COLOR CLR_CYAN, CLR_WHITE TRANSPARENT

   /*  // oLbxPePd:Seek("")
   @ 10, 150 SAY oBrw:oSeek PROMPT oBrw:cSeek PICTURE "@!" SIZE 120, 10      ;
      PIXEL OF oDlg COLOR CLR_CYAN, CLR_YELLOW FONT oFont BORDER
   */

   @ 10, 150 SAY oBrw:oSeek PROMPT oBrw:cSeek PICTURE "@!" UPDATE            ;
      OF oDlg PIXEL COLOR CLR_CYAN, CLR_WHITE FONT oFont SIZE 120, 10 BORDER

   @ 10, 270 SAY "Procure Por: "+cIndice + " <Back> Apaga" SIZE 150, 10 PIXEL OF oDlg          ;
      COLOR CLR_CYAN, CLR_WHITE TRANSPARENT

   WITH OBJECT oBrw:oSeek
      // oBrw:bLClicked     := { || nRecNo := ( cAlias )->( RecNo() ), oDlg:End() }
      oBrw:bLClicked     := { || oDlg:End() }
   END

   @ 1.5, 5.5 SAY "<ESC>" SIZE 50, 12 PIXEL OF oDlg COLOR CLR_CYAN, CLR_WHITE TRANSPARENT

   @ 0.5, 056 BITMAP oBmp RESOURCE cResName SIZE 50, 50 NO BORDER OF oDlg TRANSPARENT

   oBmp:cToolTip := "Pesquisa Incremental Por: " + cIndice

   @ 010, 005 BUTTONBMP oSaida PROMPT( "&Saida" ) ACTION( oDlg:End() )       ;
      RESOURCE "154" TEXTRIGHT SIZE 40, 12 PIXEL FONT oFont OF oDlg CANCEL

   oSaida:cToolTip := "Saida - Exit - Cancelar"

   //oLbxPePd:Seek("")
   ACTIVATE DIALOG oDlg CENTERED                                             ;
            ON INIT ( oBrw:cSeek(""), oBrw:SetFocus(), .F. )

   oFont:End()

   // Swap it to descending - Trocar para descendente
   SET DESCENDING ON

   CLOSE( DBPESQ )  // CLOSE FILTER - FECHO FILTRO DA XBROWSE()

   // REABRO O BANCO PARA REFRESCAR A LISTBOX ORIGINAL E POSICIONO O CURSOR

   USE CADPROPO ALIAS CADPROPO INDEX CADPROPO NEW SHARED
   SET ORDER TO 01
   SET DESCENDING ON
   GO TOP

   DBCADPROPO := ALIAS()

   SELECT( DBCADPROPO )

   oLbx:Refresh()

RETURN NIL
 


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

Re: ¿Cómo hago una búsqueda incremental en xBrowse?

Postby JoseAlvarez » Sat Oct 23, 2021 12:05 am

Code: Select all  Expand view  RUN
c_Descripcion := 1
n_Cantidad    := 2

REDEFINE XBROWSE oBrwArticulos Id 10  DATASOURCE aArticulos              ;
                                      COLUMNS    2, 29                   ;
                                      HEADERS    "Descripcion"          ,;
                                                 "Cantidad"              ;
                                      FIELDSIZES  350,150                ;
                                      PICTURE     nil,"@E 9,999,999.99"  ;
                                      JUSTIFY     AL_LEFT               ,;
                                      AL_RIGHT                           ;
                                      CELL LINES                         ;
                                      FASTEDIT                           ;
                                      of oDlg_Articulos

                                     WITH object aArticulos
                                             
                                          oBrwArticulos :l2007                := .t.
                                          oBrwArticulos :lRecordSelector      := .t.
                                          :cFilterFld    := "DESCRIPCION"
                                          oBrwArticulos :aCols[c_Descripcion] :nHeadStrAlign := AL_CENTER
                                          oBrwArticulos :aCols[n_Cantidad]    :nHeadStrAlign := AL_CENTER
                                             
                                          oBrwArticulos :aCols[c_Descripcion] :oHeaderFont   := oFontHeader
                                          oBrwArticulos :aCols[n_Cantidad]    :oHeaderFont   := oFontHeader
                                           
                                          oBrwArticulos :oDataFonts           :=oFontData
                                         
                                    END

                                      WITH OBJECT oBrwArticulos:aCols[n_Cantidad]

                                         oCol         :=oBrwArticulos:aCols[n_Cantidad]
                                         :nEditType   := EDIT_GET
                                         oBrwArticulos:aCols[n_Cantidad]:bClrStd := ChangeColor(  )

                                     END

                                    oBrwArticulos:Refresh()


Cristobal, este es el xBrowse que estoy construyendo. Trabaja sobre un arreglo de memoria

Joao, voy a darle una mirada a tu codigo, aunque ya vi que trabajas con DBF y yo lo estoy haciendo con arreglos de memoria
User avatar
JoseAlvarez
 
Posts: 798
Joined: Sun Nov 09, 2014 5:01 pm

Re: ¿Cómo hago una búsqueda incremental en xBrowse?

Postby JoseAlvarez » Sat Oct 23, 2021 1:22 pm

Amigos,
Aunque no se como funciona, ya logre hacer la busqueda, solo que lo hice "volando por instrumentos" , es decir a ciegas, no se que funcion hace cada una de las instrucciones que coloque, fijandome en las sugerencias de cristobal y joao.

lo unico que hice fue agregar esto:


.
.
.
oBrwArticulos :lAutoSort := .t.
oBrwArticulos :lIncrFilter := .t.
oBrwArticulos :lSeekWild := .t.
oBrwArticulos :Seek("")
.
.
.

REDEFINE SAY oBrwArticulos:oSeek ID 4004 PROMPT oBrwArticulos:cSeek PICTURE "@!" OF oDlg_Articulos FONT oFontSays COLOR CLR_HRED
oBrwArticulos:bChange := {|| oBrwArticulos:oSeek:Refresh() }
.
.
.
.

Activate dialog oDlg_Articulos on init (oBrwArticulos:cSeek( "" ), oBrwArticulos:SetFocus())
.



¿podrian por favor explicarme que hace cada una de ellas? aunque se puede inferir, seria bueno una explicacion mas detallada para saber como funcionan y como usarla mas adelante.

el caso es que esta funcionado solo "hacia adelante" mientras voy digitando las letras de busqueda, pero si quiero retroceder, al oprimir BACKSPACE me arroja este error



Application
===========
Path and name: C:\Neuro32\Neuro32.EXE (32 bits)
Size: 7,247,872 bytes
Compiler version: xHarbour 1.2.3 Intl. (SimpLex) (Build 20170215)
FiveWin Version: FWHX 14.06
Windows version: 6.2, Build 9200

Time from start: 0 hours 1 mins 30 secs
Error occurred at: 23/10/2021, 09:15:43
Error description: Error BASE/1004 Class: 'NIL' has no exported method: CORDER
Args:
[ 1] = U

Stack Calls
===========
Called from: => CORDER( 0 )
Called from: c:\fwh\source\classes\xbrowse.prg => TXBROWSE:ARRAYINCRFILTER( 8466 )
Called from: c:\fwh\source\classes\xbrowse.prg => TXBROWSE:ARRAYINCRSEEK( 8369 )
Called from: c:\fwh\source\classes\xbrowse.prg => (b)TXBROWSE:SETARRAY( 4308 )
Called from: c:\fwh\source\classes\xbrowse.prg => TXBROWSE:SEEK( 6474 )
Called from: c:\fwh\source\classes\xbrowse.prg => TXBROWSE:KEYCHAR( 2495 )
Called from: => TWINDOW:HANDLEEVENT( 0 )
Called from: c:\fwh\source\classes\control.prg => TCONTROL:HANDLEEVENT( 1733 )
Called from: c:\fwh\source\classes\xbrowse.prg => TXBROWSE:HANDLEEVENT( 12264 )
Called from: c:\fwh\source\classes\window.prg => _FWH( 3279 )
Called from: => DIALOGBOX( 0 )
Called from: c:\fwh\source\classes\dialog.prg => TDIALOG:ACTIVATE( 277 )
Called from: .\prg\Ajustes.PRG => FNCT_AJUSTES( 332 )
Called from: .\prg\Menus.PRG => (b)FBARRADEBOTONES( 388 )

a que se refiere con method: CORDER ????

otra cosa es que quisiera hacerlo con un campo GET y no con un say... se puede??

FW17.01 + xHarbour + BCC7.2 + Tdolphin
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 798
Joined: Sun Nov 09, 2014 5:01 pm

Re: ¿Cómo hago una búsqueda incremental en xBrowse?

Postby JoseAlvarez » Sat Oct 23, 2021 5:31 pm

LISTO amigos,

Gracias a Todos por sus aportes y ayuda.

Ya hice la busqueda, me funciona bien,
Lo unico es que quisiera hacerlo con un campo GET y no con say

Los usuarios de mi sistema ya estan acostumbrados a las busquedas con GET , este estilo de SAYS seguro traera inconformidad por aquello del costumbrismo y me pidiran que mantenga la misma linea y estilo. Ademas de que esteticamente no me gusta para nada.

alguna manera de hacerlo con un GET ?
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 798
Joined: Sun Nov 09, 2014 5:01 pm

Re: ¿Cómo hago una búsqueda incremental en xBrowse?

Postby artu01 » Sat Oct 23, 2021 6:49 pm

fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
artu01
 
Posts: 400
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: ¿Cómo hago una búsqueda incremental en xBrowse?

Postby JoseAlvarez » Sat Oct 23, 2021 11:06 pm



Gracias Artu01,

Ya revise y probe, funciona igual que el SAY, solo que aparece en el GET.

No es lo que quiero, no quisiera escribir "en el aire" sino dentro del get. Cuando lo hago, el browse no se mueve. Tengo que tipear fuera del browse para que se active la busqueda.

Creo que es por mi version de FW, 17.01
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 798
Joined: Sun Nov 09, 2014 5:01 pm

Re: ¿Cómo hago una búsqueda incremental en xBrowse?

Postby karinha » Sun Oct 24, 2021 2:13 pm

José, mira este ejemplo se te gusta? FiveWin és fácil, difícil és comprender el Silvio Falconi. jajajajajaja. Broma, broma.


Code: Select all  Expand view  RUN

// \samples\XBRWGET.PRG

#Include "FiveWin.ch"

#Define CLR_LGREEN     nRGB( 190, 215, 190 )
#Define CLR_SOFTYELLOW nRGB( 255, 251, 225 )

ANNOUNCE RDDSYS
REQUEST DBFCDX, DBFFPT

FUNCTION Main()

   LOCAL oDlg, oFont, oBrw, aCols, oGet, oCbx, cHead, aHead, aGrad, cTitle
   LOCAL cSeek := SPACE( 100 )

   SET DATE BRITISH
   SET CENTURY ON
   SET DELETED ON

   tGet():lDisColors  := .F.
   tGet():nClrTextDis := CLR_HBLUE
   tGet():nClrPaneDis := CLR_SOFTYELLOW

   SetGetColorFocus( CLR_LGREEN )

   FERASE( "CUSTOMER.CDX" )

   USE CUSTOMER VIA "DBFCDX"

   FW_CdxCreate()  // CREA TU PROPIO INDICE.

   SET ORDER TO TAG FIRST
   GO TOP

   aCols := {                                 ;
            { "FIRST",  "Nombre",,    120, }, ;
            { "LAST",   "Apellido",,  120, }, ;
            { "STREET", "Dirección",, 180, }, ;
            { "CITY",   "Ciudad",,    150, }, ;
            { "STATE",  "Estado",,     50, } }

   aHead := ArrTranspose( aCols )[ 2 ]
   cHead := "Nombre"

// aGrad := { { 0.30, CLR_BLACK, CLR_YELLOW},{ 0.50, CLR_YELLOW, CLR_BLACK } }
   aGrad := { { 0.30, CLR_CYAN, CLR_HCYAN  },{ 0.50, CLR_HCYAN, CLR_CYAN } }

   cTitle := "Busqueda Incremental Para José Alvarez"

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0, -14

   DEFINE DIALOG oDlg TITLE cTitle SIZE 800, 600 PIXEL TRUEPIXEL FONT oFont  ;
      GRADIENT aGrad

   oDlg:lHelpIcon := .F.

   @ 20, 20 COMBOBOX oCbx VAR cHead ITEMS aHead                              ;
      SIZE 150, 200 PIXEL OF oDlg                                            ;
      ON CHANGE ( oBrw:Seek( "" ),                                           ;
                  oBrw:cFilterFld := oBrw:oCol( cHead ):cExpr,               ;
                  oBrw:SetFocus() )

   @ 20, 300 GET oGet VAR cSeek SIZE 466, 24 PIXEL OF oDlg                   ;
      VALID( BUSCA_NOMBRE( cSeek, oBrw, oGet ) )
   // ON CHANGE... Funciona?

   @ 70, 20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg                          ;
      DATASOURCE "CUSTOMER" COLUMNS aCols                                    ;
      AUTOSORT CELL LINES NOBORDER

   WITH OBJECT oBrw

      :lIncrFilter := .T.
      :lSeekWild   := .T.

      :oSeek       := oGet

      :bKeyDown    := { |nKey| If( nKey == VK_RETURN, ( oDlg:End() ), NIL ) }
      :bKeyChar    := { |nKey| If( nKey == VK_ESCAPE, ( oBrw:Seek( "" ), oDlg:End() ), nil ) }
      :bLDblClick  := { || cSeek := oBrw:aRow[ 2 ], oDlg:End() }

      :CreateFromCode()

   END

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

   RELEASE FONT oFont

RETURN NIL

FUNCTION BUSCA_NOMBRE( bSeek, oBrw, oGet )

   LOCAL ErroSeek := SPACE( 100 )

   SEEK( UPPER( bSeek ) )

   IF FOUND()

      oBrw:Refresh()
      oBrw:SetFocus()

   ELSE

      SET SOFTSEEK ON

      SEEK( UPPER( bSeek ) )

      oGet:VARPUT( ErroSeek )
      oGet:Refresh()

      SET SOFTSEEK OFF

   ENDIF

RETURN( .T. )

// FIN / END
 


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

Re: ¿Cómo hago una búsqueda incremental en xBrowse?

Postby karinha » Mon Oct 25, 2021 6:27 pm

En mi humilde opinión, xBrowse () se está volviendo ilimitado. Simplemente fantástico.

https://imgur.com/fsPWkFW

Image

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

Re: ¿Cómo hago una búsqueda incremental en xBrowse?

Postby JoseAlvarez » Thu Oct 28, 2021 4:51 pm

karinha wrote:En mi humilde opinión, xBrowse () se está volviendo ilimitado. Simplemente fantástico.

https://imgur.com/fsPWkFW

Image

Regards, saludos.


Joao, muchisimas gracias una vez mas por tu gentil ayuda,

Justo lo que queria!!

Agradecido, un abrazo.
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 798
Joined: Sun Nov 09, 2014 5:01 pm

Re: ¿Cómo hago una búsqueda incremental en xBrowse?

Postby Ramón J. » Wed Nov 03, 2021 10:09 am

Buenos días

João, me gusta mucho tu aplicación. Una pregunta: ¿tu aplicación también sirve para trabajar en red? Si es así, ¿cómo haces para que las búsquedas incrementales no se ralenticen ni se bloquee la aplicación? Verás, en mi aplicación cuando trabajas en modo local las búsquedas son rápidas, pero cuando cuando trabajas en red se ralentiza mucho e incluso a veces se bloquea y se cierra la aplicación.

El código de la búsqueda incremental en mi aplicación es este:

Code: Select all  Expand view  RUN

IF ! file ( CURDRIVE() +":"+cRuta+"\DATA\SATINDEX.DBF")
  msgstop("No se encontró la base de datos de SAT";
  )
  else
  USE ( CURDRIVE() +":"+cruta+"\DATA\SATINDEX.DBF") ALIAS "INDICE" index "SATINDEX" SHARED NEW
   ENDIF


SELE INDICE
INDICE->(dbgoTOP())

DEFINE DIALOG oDlg FROM 3, 3 TO 33, 100 TITLE "Mantenimiento de SAT"
oDlg:nStyle:=nAnd(oDlg:nStyle, nNOt(WS_SYSMENU))

@ 11,110 GET oGet VAR cSeek SIZE 250,10 PIXEL OF oDlg COLOR CLR_BLACK,CLR_YELLOW PICTURE '@!'
  oGet:cTooltip:= {"Introduzca nombre de la SAT o parte de ella.","Búsqueda incremental"}
       
 @ 2,1 XBROWSE oLbx SIZE 360, 160 OF oDlg DATASOURCE "INDICE" ;
   COLUMNS "NOMBRE_SAT","N_REG_IFA","MUNIC_SOC", "PROVIN_SOC","ALT_DIS_CA";
    HEADERS "Denomimación", "Nº registro", "Localidad", "Provincia", "Situación";   
   COLSIZES 310,70,100,80,250 CELL LINES FOOTERS AUTOSORT FASTEDIT
         
       oCol:= oLbx:aCols[ 1 ]          
       oLbx:lHScroll:= .F.
       oLbx:lVScroll:= .T.        
      //  oLbx:lfastdraw:=.t.
       
       
      WITH OBJECT  oLbx
      :lIncrFilter   := .t.
      : oSeek         := oGet
      :lSeekWild     := ( nWild == 2 )
      :cFilterFld    := "NOMBRE_SAT"
      :nStretchCol   := STRETCHCOL_WIDEST
     END    
 
 oLbx:CreateFrom
 


La búsqueda es letra a letra. La base de datos tiene solo tiene 2.000 registros. En modo local va muy bien, pero cuando colocas la aplicación en la red se vuelve muy lenta, a veces la diálogo se queda en blanco y muchas veces se bloquea.

¿Cómo lo harías para que fuera igual de rápido en red?

Saludos y gracias
FWH 20.12 BCC7
Ramón J.
 
Posts: 152
Joined: Mon Feb 13, 2006 8:23 pm

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 29 guests