FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Ayuda con FILTER y MARIADB
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
Ayuda con FILTER y MARIADB
Posted: Mon Feb 28, 2022 11:15 AM
Hola.
Si
Code (fw): Select all Collapse
 ::vGets[1]:= "Ñ"


Al hacer esto no me filtra
Code (fw): Select all Collapse
   

    cWhere := "a.apellido1 LIKE '%" + AllTrim( ::vGets[ 01 ] ) + "%'"
    ::oQry:SetFilter( cWhere)
   ::oQry:Requery()
   ::oBrw:Refresh()

   FWDBG ::oQry    // me sigue mostrando los datos sin el filter aplicado.



que hago mal?
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Posts: 1067
Joined: Wed Nov 09, 2005 02:17 AM
Re: Ayuda con FILTER y MARIADB
Posted: Mon Feb 28, 2022 11:37 AM
Try It:
Code (fw): Select all Collapse
 
cWhere := "a.apellido1 LIKE '%" + AllTrim( ::vGets[ 01 ] ) + "%'"
::oQry:Requery()
::oQry:SetFilter( cWhere)
::oBrw:Refresh()


But, it's important to keep in mind Mr Rao words:
"(b) Filter expression should be in DBF syntax and evaluated with DBF rules but not in Sql syntax. However, RowSet object tries its best to translate the Sql syntax to Dbf syntax in simple cases."
Sds,
Vilian F. Arraes
vilian@vfatec.com.br
Belém-Pa-Brazil
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
Re: Ayuda con FILTER y MARIADB
Posted: Mon Feb 28, 2022 12:26 PM

no funciona. ya lo he probado.

FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
Re: Ayuda con FILTER y MARIADB
Posted: Mon Feb 28, 2022 12:29 PM
si pongo

Code (fw): Select all Collapse
? ::oQry:cFilter


me devuelve una cadena vacia.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Posts: 1067
Joined: Wed Nov 09, 2005 02:17 AM
Re: Ayuda con FILTER y MARIADB
Posted: Mon Feb 28, 2022 01:28 PM
I think it's happening because your filter expression is not in a DBF syntax. Please, try it:
Code (fw): Select all Collapse
cWhere := " apellido1 =  [TESTE] "
::oQry:Requery()
::oQry:SetFilter( cWhere)
? ::oQry:cFilter
::oBrw:Refresh()
Sds,
Vilian F. Arraes
vilian@vfatec.com.br
Belém-Pa-Brazil
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
Re: Ayuda con FILTER y MARIADB
Posted: Mon Feb 28, 2022 01:41 PM

Esta funcionando, ahora pregunto y como seria la sintaxis utilizando LIKE %...%?

FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Posts: 1067
Joined: Wed Nov 09, 2005 02:17 AM
Re: Ayuda con FILTER y MARIADB
Posted: Mon Feb 28, 2022 01:44 PM

I think in this case, you must change your SQL statement, because operator % doesn't exist in DBF syntax.

Sds,
Vilian F. Arraes
vilian@vfatec.com.br
Belém-Pa-Brazil
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: Ayuda con FILTER y MARIADB
Posted: Tue Mar 01, 2022 02:20 AM
Hola, yo hago asi:

Code (fw): Select all Collapse
cProd := "SELECT productos.cod_producto, productos.producto, productos.precio_venta1, productos.unidad, productos.saldo, productos.cod_proveedor, productos.cod_marca, productos.cod_grupo, productos.codbar1, productos.codbar2, productos.observaciones, proveedor.razon_social, marca.detalle AS marca, grupo.detalle AS grupo "
cProd += "FROM productos "
cProd += "LEFT JOIN proveedor ON productos.cod_proveedor = proveedor.ruc_dni "
cProd += "LEFT JOIN marca ON productos.cod_marca = marca.codigo "
cProd += "LEFT JOIN grupo ON productos.cod_grupo = grupo.codigo "
cProd += "ORDER BY productos.producto"

/*
oProd := oCn:Call( "proc001" ) // lista de productos
oProd := oCn:Execute( "CALL proc001", .t. ) // lista de productos
oProd := oCn:RowSet( "CALL proc001", .t. )
xbrowse(oProd)
*/

eProd := {|| oProd := SQLQry(oCn, oProd, cProd) }
EVAL(eProd)
.....
...

       REDEFINE XBROWSE oLbx ;
                   DATASOURCE oProd ;    ///                AUTOCOLS ;                AUTOSORT LINES ;
                   FASTEDIT LINES ;
                   FONT oFont1 ;  //
                   ON CHANGE (oApp:cSeek := "", oSay:Refresh(), cObser := MyCampo(oProd, "observaciones"), oObser:Refresh(), RRefresh(oDat) ) ; //, EVAL(eImg) ) ;
                   ON DBLCLICK (lOk := .t., oDlg:End()) ;
                   ID 121 OF oDlg

                   oCol := oLbx:AddCol()
                   oCol:bStrData      := { || oProd:producto }
                   oCol:cHeader       := "Producto/Servicio"
                   oCol:bClrStd       := { || { IF(oProd:saldo <= 0, CLR_GRAY, CLR_BLUE), CLR_WHITE } }
                   oCol:nDataStrAlign := AL_LEFT
                   oCol:nWidth        := 480
....
.....
       REDEFINE BTNBMP oBusca1 ;
                PROMPT "Producto" ;
                ACTION (FiltrarTx(oProd, 1, cFiltro), oLbx:Refresh(), oLbx:SetFOcus() ) ;
                ID 112 OF oDlg
                oBusca1:cToolTip := "Filtrar por Nombre de Producto"

//---------------------------------------------------------------------------------------------------------------------------------------------------
Function FiltrarTx(oProd, nModo, cFiltro)
cFiltro := ALLTRIM(cFiltro)
If nModo = 1
   oProd:SetFilter("producto LIKE '%" + cFiltro + "%'")
EndIf
IF nModo = 2
   oProd:SetFilter("codbar1 LIKE '%" + cFiltro + "%' OR observaciones LIKE '%" + cFiltro + "%'")
Endif
Return(oProd)
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
Re: Ayuda con FILTER y MARIADB
Posted: Tue Mar 01, 2022 11:50 AM

WIL!
eso es conn MARIADB nativo con fwh?
porque es la manera que yo intente utilizar y no funciona. No me filtra, de hecho hice el filtro, y lo visualice con el FWDBG y con el XBROWSER ::oQry y nada.

FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: Ayuda con FILTER y MARIADB
Posted: Tue Mar 01, 2022 02:41 PM
Gossfancito,,, como estas,,, efectivamente es con MaiaDB nativo
Code (fw): Select all Collapse
//----------------------------------------------------------------------------------------------------------------------------------------
Function ConetcaDB(oCn, oDlg, oMsg)
TRY
  if oCn == nil .or. oCn:Ping() = .F.
     If oDlg <> Nil
       oMsg:SetText("Conectando")
       oDlg:Refresh()
     EndIf
     oCn := Maria_Connect( {oApp:cHost, "", oApp:cUser, oApp:cPass } )
  endif
CATCH
  oCn := Nil
END

If oCn = Nil
   IF oDlg <> NIl
     oMsg:SetText("No Existe Servicio en El Servidor")   // + oApp:cHost)
     oDlg:Refresh()
     Inkey(4)
     oDlg:End()
   EndIf
   Return(Nil)
EndIf
oCn:Execute( "SET SESSION wait_timeout = 86400;" )
Return(oCn)
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
Re: Ayuda con FILTER y MARIADB
Posted: Tue Mar 01, 2022 03:15 PM

voy a meterle pata con eso, porque aca no me funciona algo debo estar haciendo mal.

GRACIAS!

FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Ayuda con FILTER y MARIADB
Posted: Wed Mar 02, 2022 11:36 AM
Hola Gustavo:
Si lo que sigues buscando es la Ñ, hay que ver que codificación tiene la tabla
Prueba agregando a tu query lo siguiente:
Code (fw): Select all Collapse
SELECT * FROM tu_tabla WHERE  apellido1 LIKE '%Ñ%' COLLATE utf8_spanish_ci
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
Re: Ayuda con FILTER y MARIADB
Posted: Wed Mar 02, 2022 08:25 PM

Hola.

No es solo la Ñ, es que el setfilter en si no me funciona.

FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
Re: Ayuda con FILTER y MARIADB
Posted: Tue Mar 15, 2022 03:29 PM
Willi,

No me estaría funcionando esto, lo puli hasta llegar a un simple:
Code (fw): Select all Collapse
   ::oQry:SetFilter( "c6 LIKE '%" + AllTrim( ::vGets[ 01 ] ) + "%'" )
   ::oQry:ReQuery()

   ::oBrw:Refresh()
   XBROWSER ::oQry


y el xbrowser no me muestra los resultados esperados.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
Re: Ayuda con FILTER y MARIADB
Posted: Tue Mar 15, 2022 03:39 PM
Cuando miro
::clastsql
el valor detornado no es el correspondiente al filter, sino al original.
El original es:
Code (fw): Select all Collapse
      TEXT into cSql
      Select
      a.id             AS c0,
      a.idusuario      AS c1,
      a.nombre1        AS c2,
      a.nombre2        AS c3,
      a.nombre3        AS c4,
      a.nombre4        AS c5,
      a.apellido1      AS c6,
      a.apellido2      AS c7,
      a.nacimiento     AS c8,
      a.fecha_nac      AS c9,
      a.direccion      AS c10,
      a.estadoactual   AS c11,
      b.id             AS c12,
      b.usuario        AS c13,
      a.ida            AS c14,
      a.idb            AS c15,
      a.idc            AS c16,
      c.idusuario      AS c17,
      c.idcarpeta      AS c18
      FROM tbcarpetas AS a
      Left OUTER JOIN tbautoriza AS b ON a.idusuario = b.id
      Left OUTER JOIN tbasignado AS c ON a.id = c.idcarpeta
      WHERE c.idusuario = ?
      ORDER BY a.apellido1
      ENDTEXT

      ::oQry := ::oCnx:QUERY( cSql, { ::aUsuario[ 1 ] } )
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/