Page 1 of 1

Ejemplo xBrowse-MySql?

PostPosted: 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?

PostPosted: 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?

PostPosted: Mon Apr 02, 2012 1:07 pm
by FranciscoA
jbrita, gracias por tu ejemplo. Pruebo y te comento.

Saludos.

Re: Ejemplo xBrowse-MySql?

PostPosted: 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?

PostPosted: 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?

PostPosted: 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?

PostPosted: 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?

PostPosted: 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