Ejemplo xBrowse-MySql?

Ejemplo xBrowse-MySql?

Postby FranciscoA » Mon Apr 02, 2012 2:21 am

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.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Ejemplo xBrowse-MySql?

Postby jbrita » Mon Apr 02, 2012 12:15 pm

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
Last edited by jbrita on Mon Apr 02, 2012 1:58 pm, edited 1 time in total.
jbrita
 
Posts: 486
Joined: Mon Jan 16, 2006 3:42 pm

Re: Ejemplo xBrowse-MySql?

Postby FranciscoA » Mon Apr 02, 2012 1:07 pm

jbrita, gracias por tu ejemplo. Pruebo y te comento.

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Ejemplo xBrowse-MySql?

Postby jbrita » Mon Apr 02, 2012 1:51 pm

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
jbrita
 
Posts: 486
Joined: Mon Jan 16, 2006 3:42 pm

Re: Ejemplo xBrowse-MySql?

Postby FranciscoA » Mon Apr 02, 2012 3:10 pm

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
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Ejemplo xBrowse-MySql?

Postby FranciscoA » Mon Apr 02, 2012 6:04 pm

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.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Ejemplo xBrowse-MySql?

Postby Francisco Horta » Tue Apr 03, 2012 3:48 pm

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()
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: Ejemplo xBrowse-MySql?

Postby FranciscoA » Tue Apr 03, 2012 9:11 pm

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
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: carlos vargas and 37 guests