FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Busqueda incremental xBrowse+recursos+mariaDB
Posts: 851
Joined: Sun Nov 09, 2014 05:01 PM
Busqueda incremental xBrowse+recursos+mariaDB
Posted: Thu Oct 27, 2022 04: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 (fw): Select all Collapse
#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.
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: Busqueda incremental xBrowse+recursos+mariaDB
Posted: Fri Oct 28, 2022 10:51 PM
Hola Amigo:
Code (fw): Select all Collapse
-----
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)
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Busqueda incremental xBrowse+recursos+mariaDB
Posted: 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 (fw): Select all Collapse
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
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: Busqueda incremental xBrowse+recursos+mariaDB
Posted: Sat Oct 29, 2022 06: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

Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Busqueda incremental xBrowse+recursos+mariaDB
Posted: 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

Continue the discussion