Page 1 of 1
Ejemplo xBrowse-MySql?
Posted:
Mon Apr 02, 2012 2:21 am
by FranciscoA
Hola amigos.
Alguno de ustedes puede mostrarme un ejemplo con XBROWSE-TMYSQL, en el cual, el xbrowse sea refrescado después de una consulta? Es decir, que después de buscar un valor, el cursor de xbrowse se coloque en en la fila correspondiente. He estado buscando la solución a esto desde hace varios días y no doy. Con oQuery:locate() se logra, pero es muy lento. Con oQuery:Seek() se encuentra el registro pero no refresca el xBrowse.
Muchas gracias de antemano.
Re: Ejemplo xBrowse-MySql?
Posted:
Mon Apr 02, 2012 12:15 pm
by jbrita
ahi va un ejemplo:
Local cbusca :=""
@ 0.30,50 SAY "Buscar :" OF oBar FONT oVentPrinc:oFont SIZE 40, 15 COLORS CLR_BLUE, nRGB( 207, 221, 239 )
@0.35,46 GET oGet VAR cbusca OF oBar PICTURE "@S60!" SIZE 200,22 FONT oVentPrinc:oFont COLOR CLR_BLUE when .f.
oLbx := TXBrowse():New( oWChld )
Setxbrowse(oLbx, oExi_Suc ) // importante para la navegacion
oLbx:bKeyDown := {|nKey| ( PlisBuscar(nKey,@oExi_Suc,"exi_suc",nIndex[cVar],oLbx,@cBusca,cSelect),oLbx:Refresh(),oGet:Refresh() )}
FUNCTION PlisBuscar(nKey,oDatos,oTabla,oOrden,oLbx,cbusca,cSelect)
*-----------------------------------------------------
Local cQuery,campo
DEFAULT cSelect := "*"
If nKey=8
cbusca:= SubStr(cbusca,1,Len(cbusca)-1)
cQuery:="SELECT "+ cSelect + " FROM "+oTabla+" WHERE "+oOrden+" LIKE '"+UPPER(cBusca)+"%' ORDER BY "+oOrden+" LIMIT 100"
oDatos:=oServer:Query(cQuery,.T.)
Else
If nKey=190
cbusca :=cbusca + "."
Else
cbusca :=cbusca + Upper(chr(nkey))
Endif
cQuery:="SELECT "+ cSelect +" FROM "+oTabla+" WHERE "+oOrden+" LIKE '"+UPPER(cBusca)+"%' ORDER BY "+oOrden+" LIMIT 100"
oDatos:=oServer:Query(cQuery,.T.)
If oDatos:Reccount() == 0
cbusca:=left(cbusca,len(cbusca)-1)
cQuery:="SELECT "+ cSelect +" FROM "+oTabla+" WHERE "+oOrden+" LIKE '"+UPPER(cBusca)+"%' ORDER BY "+oOrden+" LIMIT 100"
oDatos:=oServer:Query(cQuery,.T.)
Endif
Endif
Setxbrowse(oLbx, oDatos ) // importante para la navegacion
oDatos:Refresh()
oLbx:Refresh(.t.)
oLbx:SetFocus()
oDatos:GOTOP()
return .t.
Saludos
Re: Ejemplo xBrowse-MySql?
Posted:
Mon Apr 02, 2012 1:07 pm
by FranciscoA
jbrita, gracias por tu ejemplo. Pruebo y te comento.
Saludos.
Re: Ejemplo xBrowse-MySql?
Posted:
Mon Apr 02, 2012 1:51 pm
by jbrita
me falto algo:
Local nIndex:={"ma_arti","ma_des1"} //nIndex
Local cSelect:="ma_arti,ma_des1,ma_fami,ma_pcom,ma_flet,ma_comp,ma_desc1,ma_desc2,ma_desc3,sto_ok,ma_bloqueo"
oExi_Suc:=oServer:Query("SELECT ma_arti,ma_des1,ma_fami,ma_pcom,ma_flet,ma_comp,ma_desc1,ma_desc2,ma_desc3,sto_ok,ma_bloqueo FROM exi_suc ORDER BY ma_des1 LIMIT 50")
oExi_Suc:GoTop()
ahora sip
saludos
Re: Ejemplo xBrowse-MySql?
Posted:
Mon Apr 02, 2012 3:10 pm
by FranciscoA
jbrita.
Probé tu ejemplo y funciona. Desafortunadamente no es el comportamiento que busco. El que presente resultados filtrados ya lo había hecho, lo que quiero es que se mantenga siempre a la vista todos los registros, pero señalado el registro buscado.
El codigo que he probado es este:
- Code: Select all Expand view
if MisGets( "Buscar", cBusqueda,cTitulos, @cCuenta,"lupa" )
oCatalogo:=oServer:Query("SELECT * FROM catalogo WHERE codicont = '"+cCuenta+"' ORDER BY codicont;")
if oCatalogo:LastRec() == 0
oCatalogo:Goto(nRecNo)
MsgInfo("Registro no fue encontrado","Informacion" )
endif
endif
oLbx:SetMySql(oCatalogo,.f.)
oCatalogo:Refresh()
oLbx:Refresh()
oLbx:SetFocus()
return nil
//pero filtra por el registro encontrado y si aplico nuevamente oCatalogo:=oServer:Query("SELECT * FROM catalogo ORDER //BY codicont;"), se va al primer registro perdiendo la posicion del encontrado.
//Este otro lo hace pero es muy lento (ya sabemos con locate)
- Code: Select all Expand view
if !oCatalogo:Locate("Codicont",cCodigo,,)
MsgInfo("Registro no fue encontrado","Informacion" )
oCatalogo:Goto(nRecNo)
oCatalogo:Refresh()
return nil
else
Msginfo("Encontrado Recno")
endif
endif
oCatalogo:Refresh()
oLbx:Refresh()
oLbx:SetFocus()
return nil
Y este otro lo encuentra pero no refresca el oBrw
- Code: Select all Expand view
if !oCatalogo:Seek( cCodigo,"codicont",{"codicont","nombre"} )
MsgInfo("Registro no fue encontrado","Informacion" )
oCatalogo:Goto(nRecNo)
oCatalogo:Refresh()
return nil
else
Msginfo("Encontrado")
endif
endif
oCatalogo:Refresh()
oLbx:Refresh()
oLbx:SetFocus()
return nil
Gracias por tu interés. Voy a estudiar el SetMySql-oBrw:bSeek de mi version 10.06 a ver que encuentro.
Saludos
Re: Ejemplo xBrowse-MySql?
Posted:
Mon Apr 02, 2012 6:04 pm
by FranciscoA
jbrita.
Aunque no he logrado 100% mi propósito, tu código me ayudó a solventar lo de la velocidad, en esta parte:
Así lo tenía: ON CHANGE ( oCatalogo:locate( "Codicont", substr(cVar,1,len(NIV1)),, ),oCatalogo:Refresh(), oLbx:Refresh() )
Así queda ahora
REDEFINE ComboBox oCbx VAR cVar ID 109 OF oDlg ITEMS cItems ;
ON CHANGE ( oCatalogo:=oServer:Query("SELECT * FROM catalogo WHERE codicont LIKE '"+substr(cVar,1,len(NIV1))+"%' ORDER BY codicont;") ,;
oLbx:SetMySql(oCatalogo,.f.),;
oCatalogo:Refresh(),;
oLbx:Refresh() )
Lo del catalogo lo dejo momentáneamente filtrado por grupos. Puse un button por si se desea ver todo el catalogo de nuevo.
Muchas gracias.
Saludos.
Re: Ejemplo xBrowse-MySql?
Posted:
Tue Apr 03, 2012 3:48 pm
by Francisco Horta
Tocayo,
Creo te falta posicionar el puntero al registro encontrado
if !oCatalogo:Seek( cCodigo,"codicont",{"codicont","nombre"} )
MsgInfo("Registro no fue encontrado","Informacion" )
oCatalogo:Goto(nRecNo)
oCatalogo:Refresh()
return nil
else
-->> nRec := oCatalogo:RecNo() <<--
oCatalogo:GoTo(nRec)
Msginfo("Encontrado")
endif
endif
oCatalogo:Refresh()
oLbx:Refresh()
oLbx:SetFocus()
Re: Ejemplo xBrowse-MySql?
Posted:
Tue Apr 03, 2012 9:11 pm
by FranciscoA
Gracias Francisco, pero sigue lo mismo. La barra no se coloca sobre el registro encontrado.
- Code: Select all Expand view
//-----------------------------------------
Function SeekCata( oLbx, oCatalogo )
local cCodigo:=space(len(oCatalogo:codicont))
local ctitulos:="Introduzca valor", cBusqueda:="Buscando Valores"
local nRecNo := oCatalogo:RecNo(),hInfo
if MisGets( cBusqueda,"Buscar",cTitulos, @cCodigo,"lupa" )
if !oCatalogo:Seek(cCodigo,"codicont")
MsgInfo("Registro no fue encontrado","Informacion" )
oCatalogo:Goto(nRecNo)
oCatalogo:Refresh()
return nil
else
nRecno := oCatalogo:RecNo()
oCatalogo:GoTo(nRecno)
Msginfo("Encontrado ")
endif
endif
//oLbx:SetMySql(oCatalogo,.f.)
oCatalogo:Refresh()
oLbx:Refresh()
oLbx:SetFocus()
return nil
Saludos