FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Problema de ordenamiento con un rowset y SetFilter
Posts: 244
Joined: Fri Oct 28, 2005 06:29 PM
Problema de ordenamiento con un rowset y SetFilter
Posted: Thu Jul 03, 2025 01:19 PM
Buenos dias

Me encontré con el siguiente problema de ordenamiento con un rowset de mariadb al utilizar SetFilter()
La tabla esta ordenada alfabeticamente y el campo que inicia con Ñ, en el primer xBrowser lo muestra en el lugar que corresponde, despues de la N.
Luego se hace un SetFilter() y en el siguiente xBrowser, el registro con Ñ lo muestra al final y no donde corresponde.

Muchos saludos
#include "fivewin.ch"

//----------------------------------------------------------------------------//

function Main()

   local oCn, oRs

   SET DATE FRENCH
   SET CENTURY ON

   CursorWait()

   oCn := MyCn()

   oRs := oCn:RowSet( "SELECT * FROM marcas ORDER BY mar_des" )

   xBrowser oRs

   oRs:SetFilter( "clase=2" )

   xBrowser oRs

   oRs:Close()
   oCn:Close()

return nil

//----------------------------------------------------------------------------//

Function MyCn()

   // maria_Connect( <cHost>, [<cDB>], <cUser>, <cPassword>, [<nPort>], [<nFlags>], [<chrset>] )
   cHost := "209.250.245.152"
   cDB   := "fwh"
   cUser := "fwhuser"
   cPass := "FiveTech@2022"
   nPort := 3306

Return maria_Connect( cHost, cDB, cUser, cPass, nPort )

//----------------------------------------------------------------------------//
Alejandro Cebolido

Buenos Aires, Argentina
Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Problema de ordenamiento con un rowset y SetFilter
Posted: Thu Jul 03, 2025 03:24 PM
This is the recommended method:
oRs := oCn:RowSet( "SELECT * FROM marcas WHERE clase = 2 ORDER BY mar_des" )
Posts: 244
Joined: Fri Oct 28, 2005 06:29 PM
Re: Problema de ordenamiento con un rowset y SetFilter
Posted: Thu Jul 03, 2025 03:43 PM

Enrico: I know, but I need to use setfilter because it's part of a routine. I'm reporting a problem.

Thank you very much.

Alejandro Cebolido

Buenos Aires, Argentina
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Problema de ordenamiento con un rowset y SetFilter
Posted: Thu Jul 03, 2025 04:16 PM
Alejandro, it really doesn't work with SETFILTER, but doing as master Enrico indicated works very well.

Alejandro, realmente no funciona con SETFILTER, pero haciendo lo que indica el maestro Enrico funciona muy bien.
// C:\FWH\SAMPLES\TECNOSOF.PRG

#include "fivewin.ch"

EXTERNAL DESCEND

FUNCTION Main()

   LOCAL oCn, oRs, cFilter

   SET DATE FRENCH
   SET CENTURY ON

   FW_SetUnicode( .F. )

   CursorWait()

   oCn := MyCn()

   oRs := oCn:RowSet( "SELECT * FROM marcas ORDER BY mar_des" )

   oRs:GoTop()

   xBrowser oRs

   oRs:GoTop()

   oRs:Close()
   oCn:Close()

   CursorWait()

   oCn := MyCn()

   oRs := oCn:RowSet( "SELECT * FROM marcas WHERE clase = 2 ORDER BY mar_des" )

   oRs:ORDDESCEND( , , .F. )

   oRs:GoTop()

   xBrowser oRs

   oRs:Close()
   oCn:Close()

RETURN NIL

FUNCTION MyCn()

   LOCAL cHost, cDB, cUser, cPass, nPort

   // maria_Connect( <cHost>, [<cDB>], <cUser>, <cPassword>, [<nPort>], [<nFlags>], [<chrset>] )
   cHost := "209.250.245.152"
   cDB   := "fwh"
   cUser := "fwhuser"
   cPass := "FiveTech@2022"
   nPort := 3306

RETURN( maria_Connect( cHost, cDB, cUser, cPass, nPort ) )

// FIN / END
Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Problema de ordenamiento con un rowset y SetFilter
Posted: Thu Jul 03, 2025 08:03 PM
Estimado Alejandro

Intenta asi
    cSql:=SELECT * FROM marcas ORDER BY mar_des ?" 
    oRs:=oCn:RowSet( cSql, {"WHERE CLASE = ?",{1} } )

   xBrowser oRs

   oRs:Requery( {"WHERE CLASE = 2"} )

   xBrowser oRs
Es mejor evitar el SetFilter
Saludos,



Adhemar C.
Posts: 244
Joined: Fri Oct 28, 2005 06:29 PM
Re: Problema de ordenamiento con un rowset y SetFilter
Posted: Thu Jul 03, 2025 08:57 PM

Exelente! con eso soluciono el tema, porque el setfilter esta funcionando mal.

Esto lo descubri en una pantalla que tengo que es un abm de localidades y abajo tengo un dbcombo con las provincias.

La idea era que al seleccionar una provincia en el dbcombo, se filtren solo las localidades de esa provincia pero despues veo que el setfilter no estaba funcionando correctamente con las Ñ.

Muchos saludos

Alejandro Cebolido

Buenos Aires, Argentina
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: Problema de ordenamiento con un rowset y SetFilter
Posted: Fri Jul 04, 2025 12:44 AM
Mis Amigos.... los SetFilter en MariaDb los trabajo asi;

cFiltro := "1234567890"
oProd:oCn:RowSet( "SELECT * FROM productos ORDER BY mar_des" )
oProd:SetFilter("")
oProd:SetFilter("codbar1 LIKE '%" + cFiltro + "%' OR " + ;
"codbar2 LIKE '%" + cFiltro + "%' OR " + ;
"codbar3 LIKE '%" + cFiltro + "%' OR " + ;
"codbar4 LIKE '%" + cFiltro + "%' OR " + ;
"observaciones LIKE '%" + cFiltro + "%'")
Posts: 244
Joined: Fri Oct 28, 2005 06:29 PM
Re: Problema de ordenamiento con un rowset y SetFilter
Posted: Tue Jul 08, 2025 12:22 PM

Willi

El filtro lo hace bien SetFilter(), el problema es que antes de hacerlo, los nombres con Ñ, estan despues de la N y despues que ejecuto el SetFilter, los nombres con Ñ los manda despues de la Z, modifica el ordenamiento.

Esto lo estaba comentando para que lo revisen porque parece un bug.

Muchos saludos

Alejandro Cebolido

Buenos Aires, Argentina

Continue the discussion