Busqueda incremental xBrowse+recursos+mariaDB

Busqueda incremental xBrowse+recursos+mariaDB

Postby JoseAlvarez » Thu Oct 27, 2022 4:41 pm

Hola a todos.

Hace meses hice por aca mismo la consulta de como hacer una busqueda incremental con xBrowse. En aquella oportunidad logre hacerlo pero con el detalle que estaba trabajando con arreglos de memoria.

Esta vez, el datasource quiero manejarlo con el resultado de una consulta (oQuery) pero no se como hacerlo. Me imagino que es algo sencillo pero el que no sabe es como el que no puede ver.

El xBrowse lo hago desde recursos con Pelles C, y uso MariaDB, Harbour y FW 17.01

Alguien me da una mano?

este es el codigo que estoy manejando.


 
Code: Select all  Expand view
#include "fivewin"


Static oBrwUsuarios

Function Fnct_Usuarios()

    Local oGetSeek , oBtnBuscar , oFHeadBrw
    Local cQuery   , cTabla     , cSeek
    Local cNombre, cNick, cTelf, cStatus
    local nKey
    Local lFound := .f.
    Local lSalir := .f.

    if Fnct_CheckActive()
        fGetOut('Porque Iniciaste en Otro Equipo')
    endif

    nKey      := 1
    cSeek     := Spac(35)
    cTabla    := _cPrefijo+"_usuarios"

    cQuery    := "Select * from "+cTabla+" ORDER BY nombre;"

    TRY
    oUsuarios:=_oSqlConex:Query( cQuery )
    CATCH
        Fnct_MsgErrorBD("NoMySql"  , .f. , "No hay conexión a La Base de Datos" , "Sin Acceso a La Red","Error en servicio de Datos",)
        _oSqlConex:End()
        return .f.
    END TRY

    _oSqlConex:End()

    cNombre:= 1
    cNick  := 2  // posiciones de los campos dentro del xBrowse
    cTelf  := 3
    cStatus:= 4

  *****************************************************************************************************************************************

  Define cursor oCursorBar       resource 'manito'
  Define cursor oCursorIndicador resource 'Indicador'

  Define Font oFHeadBrw Name "Segoe UI SemiBold" Size 0, -14


  Define Dialog oDlg_Usuarios resource "oDlg_Usuarios" title 'Actualización de Datos de Usuarios'
       oDlg_Usuarios:lHelpIcon:=.f.

       Redefine get oGetSeek Var cSeek Id 11  of oDlg_Usuarios on change ;
      ((cSeek:=oGetSeek:GetText(),nkey :=oGetSeek:bKeyDown, Fnct_Seek(cSeek, oGetSeek, nKey ))

       Redefine xBrowse oBrwUsuarios Id 10  DATASOURCE oUsuarios AUTOCOLS AUTOSORT COLUMNS  2, 5, 3, 8  ;
                                                      HEADERS    "Nombre"   ,;
                                                                 "Nick"        ,;
                                                                 "Teléfono"  ,;
                                                                 "Status"      ;
                                                       FIELDSIZES  245, 98, 186,85   ;
                                                       PICTURE     nil, nil, nil, nil  ;
                                                       JUSTIFY     AL_LEFT,   AL_LEFT, AL_LEFT, AL_LEFT ;
                                                       CELL LINES FASTEDIT FOOTERS of oDlg_Usuarios
     WITH object oBrwUsuarios

            oBrwUsuarios:aCols[cNombre] :oHeaderFont:=oFHeadBrw
            oBrwUsuarios:aCols[cNick]   :oHeaderFont:=oFHeadBrw
            oBrwUsuarios:aCols[cTelf]   :oHeaderFont:=oFHeadBrw
            oBrwUsuarios:aCols[cStatus] :oHeaderFont:=oFHeadBrw

            oBrwUsuarios:nMarqueeStyle  := MARQSTYLE_HIGHLROW   // para que el apuntador ilumine la fila completa
            oBrwUsuarios:l2007          := .f.
            oBrwUsuarios:lFooter        := .t.
            :aCols[cNombre] :bFooter := { || 'Total Usuarios-> '+transform(oUsuarios:Reccount(),"@E 99") }

            :lIncrFilter := .T.
            :cFilterFld:='nombre'
            :lSeekWild   := .T.
            :oSeek       := oGetSeek

             FOR nI := 1 TO 4

                WITH OBJECT oBrwUsuarios:oCol(nI)
                   :cSortOrder     := nil
                   :cOrder         := nil
                END

            NEXT

           oBrwUsuarios:gotop()
           oBrwUsuarios:Refresh()

         END


  Activate dialog oDlg_Usuarios center

    oUsuarios:End()
    _oSqlConex:end()

return .t.

********************************************************************************************************************
Static Function Fnct_Seek(cSeek, oGetSeek, nKey )

    local cTabla, cWhere

    cTabla    := _cPrefijo+"_usuarios"
    cWhere    := "Select * from "+cTabla+" WHERE nombre LIKE '%"+alltrim(cSeek)+"%' ;"

    _oSqlConex:=tDolphinSrv():New( _cHost, _cUser, _cPasswordUser, val(_cPuertoMysql),, _cDataBase,  { | oConex, nError |  SQL_ConnetError( oConex, nError ) })
    if _oSqlConex:lError
      return .f.
  endif

    TRY
    oUsuarios:=_oSqlConex:Query( cWhere )
    CATCH
        Fnct_MsgErrorBD("NoMySql"  , .f. , "No hay conexión a La Base de Datos" , "Sin Acceso a La Red","Error en servicio de Datos",)
        _oSqlConex:End()
        return .f.
    END TRY

  oBrwUsers:SetData(oUsuarios)
  oBrwUsers:Refresh()

return .t.

 
"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: 795
Joined: Sun Nov 09, 2014 5:01 pm

Re: Busqueda incremental xBrowse+recursos+mariaDB

Postby Willi Quintana » Fri Oct 28, 2022 10:51 pm

Hola Amigo:
Code: Select all  Expand view

-----
oApp:cSeek := ""
....
.....
                REDEFINE XBROWSE oLbx ;
                          DATASOURCE oLProduc;    ///                AUTOCOLS ;                AUTOSORT LINES ;
                          FASTEDIT LINES ;
                          COLOR CLR_BLACK, oApp:cFondo02 ;
                          FONT oApp:oFontBrw1 ;
                          ON CHANGE (oApp:cSeek := "", cObser  := MyCampo(oLProduc, "observaciones"), RRefresh(oProd) ) ;
                          ID 101 OF oFld:aDialogs[1]

                          oCol := oLbx:AddCol()
                          oCol:bStrData      := { || STR(oLProduc:saldo,12,2) }
                          oCol:cHeader       := "Saldo/Stock"
                          oCol:bClrStd       := { || { CLR_BLACK, oApp:cFondo02 } }
                          oCol:nDataStrAlign := AL_RIGHT
                          oCol:nWidth        := 105

                          oLbx:bKeyDown            := {|nKey|IF(nKey = 27, ( lOk := .f., oDlg:End()), (BrowSeek(nKey, oLProduc, 1), oLbx:Refresh() ) }

......
.....
//--------------------------------------------------------------------------------------------------------------------
Function BrowSeek(nKey, oDat, nCol)
local nLen, nRec

If (nKey > 47 .AND. nKey < 58 ) .OR. ( nKey > 64 .AND. nKey < 91 ) .OR. nKey = 8 .OR. nKey = 32
 If nKey = 8 .AND. LEN(oApp:cSeek) > 0
   oApp:cSeek := SUBSTR(oApp:cSeek, 1, LEN(oApp:cSeek) - 1)
 EndIf
 If nKey <> 8
   oApp:cSeek += CHR(nKey)
 EndIf
 nLen := LEN(oApp:cSeek)
 nRec := oDat:RecNo()
 oDat:GoTop()
 WHILE !oDat:EOF()
    IF SUBSTR(oDat:FieldGet(nCol),1, nLen) == oApp:cSeek
       nRec := oDat:RecNo()
       EXIT
    EndIf
    oDat:Skip()
 ENDDO
 oDat:GoTo(nRec)
EndIf

Return(nRec)


 
 
User avatar
Willi Quintana
 
Posts: 1019
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: Busqueda incremental xBrowse+recursos+mariaDB

Postby cmsoft » Fri Oct 28, 2022 11:55 pm

Creo que esta bueno aprovechar las funcionalidades que nos da Xbrowse, y con eso lo tienes solucionado
Simplemente indicas que quieres que sea autoincremtal y filtrada la busqueda, pero no tienes que hacer ninguna funciona aparte
Code: Select all  Expand view

DEFINE DIALOG oDlg RESOURCE "ABMS" OF oWnd1
     REDEFINE XBROWSE oBrw DATASOURCE oQry;
              COLUMNS "codigo","nombre";
              HEADERS "Codigo","Nombre";
              SIZES 80,250;
              ID 111 OF oDlg AUTOSORT
     REDEFINE SAY oBrw:oSeek PROMPT "" ID 113 OF oDlg
     oBrw:aCols[2]:SetOrder()
     oBrw:lIncrFilter := .T.
     oBrw:cFilterFld:='nombre'
     oBrw:lSeekWild   := .T.
 

Y eso hace toda la magia
User avatar
cmsoft
 
Posts: 1290
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Busqueda incremental xBrowse+recursos+mariaDB

Postby Willi Quintana » Sat Oct 29, 2022 6:04 pm

La forma automática que tiene xbrowse para la búsqueda, funciona solo con una sola letra,,,, salvo que me equivoque
si tenemos una lista ordenada, y presiono "U", el puntero se coloca en el 1er registro que empieze con "U", pero si quiero hacer una búsqueda con más caracteres no funciona..
Salu2
User avatar
Willi Quintana
 
Posts: 1019
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: Busqueda incremental xBrowse+recursos+mariaDB

Postby nageswaragunupudi » Fri Nov 04, 2022 11:45 pm

XBrowse incrseek / filter etc work with more letters than one.
Please try again
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10642
Joined: Sun Nov 19, 2006 5:22 am
Location: India


Return to FiveWin para Harbour/xHarbour

Who is online

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