FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Ejemplo xBrowse-MySql?
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Ejemplo xBrowse-MySql?
Posted: Mon Apr 02, 2012 02: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
Posts: 537
Joined: Mon Jan 16, 2006 03:42 PM
Re: Ejemplo xBrowse-MySql?
Posted: 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

Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Ejemplo xBrowse-MySql?
Posted: Mon Apr 02, 2012 01:07 PM

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

Saludos.

Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 537
Joined: Mon Jan 16, 2006 03:42 PM
Re: Ejemplo xBrowse-MySql?
Posted: Mon Apr 02, 2012 01: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

Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Ejemplo xBrowse-MySql?
Posted: Mon Apr 02, 2012 03: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 (fw): Select all Collapse
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 (fw): Select all Collapse
  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 (fw): Select all Collapse
  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
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Ejemplo xBrowse-MySql?
Posted: Mon Apr 02, 2012 06: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
Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
Re: Ejemplo xBrowse-MySql?
Posted: Tue Apr 03, 2012 03: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
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Ejemplo xBrowse-MySql?
Posted: Tue Apr 03, 2012 09:11 PM
Gracias Francisco, pero sigue lo mismo. La barra no se coloca sobre el registro encontrado.
Code (fw): Select all Collapse
//-----------------------------------------
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

Continue the discussion