Problema de ordenamiento con un rowset y SetFilter

Post Reply
User avatar
TecniSoftware
Posts: 251
Joined: Fri Oct 28, 2005 6:29 pm
Location: Hudson, Buenos Aires, Argentina

Problema de ordenamiento con un rowset y SetFilter

Post by TecniSoftware »

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

Code: Select all | Expand

#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
User avatar
Enrico Maria Giordano
Posts: 9054
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Re: Problema de ordenamiento con un rowset y SetFilter

Post by Enrico Maria Giordano »

This is the recommended method:

Code: Select all | Expand

oRs := oCn:RowSet( "SELECT * FROM marcas WHERE clase = 2 ORDER BY mar_des" )
User avatar
TecniSoftware
Posts: 251
Joined: Fri Oct 28, 2005 6:29 pm
Location: Hudson, Buenos Aires, Argentina

Re: Problema de ordenamiento con un rowset y SetFilter

Post by TecniSoftware »

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
User avatar
karinha
Posts: 8720
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

Re: Problema de ordenamiento con un rowset y SetFilter

Post by karinha »

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.

Code: Select all | Expand

// 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
User avatar
acuellar
Posts: 1713
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Problema de ordenamiento con un rowset y SetFilter

Post by acuellar »

Estimado Alejandro

Intenta asi

Code: Select all | Expand

    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 Cuéllar

User avatar
TecniSoftware
Posts: 251
Joined: Fri Oct 28, 2005 6:29 pm
Location: Hudson, Buenos Aires, Argentina

Re: Problema de ordenamiento con un rowset y SetFilter

Post by TecniSoftware »

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
User avatar
Willi Quintana
Posts: 1070
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú
Contact:

Re: Problema de ordenamiento con un rowset y SetFilter

Post by Willi Quintana »

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 + "%'")
User avatar
TecniSoftware
Posts: 251
Joined: Fri Oct 28, 2005 6:29 pm
Location: Hudson, Buenos Aires, Argentina

Re: Problema de ordenamiento con un rowset y SetFilter

Post by TecniSoftware »

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
Post Reply