FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Que hago mal con set filter y oMsfItem...
Posts: 632
Joined: Thu Jan 19, 2006 10:45 AM
Que hago mal con set filter y oMsfItem...
Posted: Tue Mar 10, 2009 02:19 PM
Estoy implementando un filtro que pueda ir en funcion del indice activo y que cuando este activo, me muestre un item en la barra de mensajes.

Problemas:
1) Si lo hago directamente escribiendo el filtro, --- set filter to alltrim(x_nom) $ ORASUNTO --- funciona bien pero no si lo intento hacer con ---set filter to alltrim( x_nom) $ indexord(0)---, indexord(0) me devuelve lo mismo ORASUNTO. Quiero intentar que sea automatico, o sea, que me haga el filtro solo por los campos que tiene el indice activo.

2) Defino la variable privada oMsgFilter (en el main.prg) y la añado a la barra cuando ejecuto el filtro (que esta en un otro prg que se ejecuta despues del main), y cuando la cancelo esta se elimina. Este procedimiento solo me lo deja ejecutar una vez y nunca me deja poner el oMsgFilter a nil.

Os dejo el codigo por si me podeis decir algo

Code (fw): Select all Collapse
function filter ()

Local oDlg ,oNom, x_nom := "                                "
Local cText := ""
Local lOk := .F. //Defino una variable para el paso al proceso siguiente en el dialogo

   //Cuadro de petición de datos.
   DEFINE DIALOG oDlg FROM 12, 12 TO 24, 65 TITLE "Filtrar por: " + x_nind[indexord()]

      @ 2, 2 SAY "Filtro: " OF oDlg
      @ 2, 9 GET oNom VAR x_nom OF oDlg PICTURE "@!" SIZE 100,12

      @ 4, 10  BUTTON "&Ok" OF oDlg SIZE 40, 12  ;
              ACTION  ( lOk := .T. , oDlg:End() )
      @ 4, 18 BUTTON "&Cancelar" OF oDlg SIZE 40, 12 ;
              ACTION  ( lOk := .F. , oDlg:End() )

    ACTIVATE DIALOG oDlg CENTERED
    


     if lOk = .T.
       
         
         //? indexkey(0) devuelve ORASUNTO (el campo)
         //? x_nind[indexord()] devuelve ASUNTO (el literal del campo)
         
         IF oMsgFilter == NIL //Si no esta activo pongo el mensaje en la barra
                      DEFINE MSGITEM oMsgFilter OF oWndEdit:oMsgBar ;
                      PROMPT "Filtro lento" ;//  
                      SIZE 80;
                      TOOLTIP "Filtro activo lento, pulsa aquí para cambiar el filtro";
                      COLOR CLR_WHITE, CLR_HRED ;
                      ACTION filter()

                 ENDIF

         
        //set filter to alltrim(x_nom) $ indexkey(0) ---Esto no funciona
                   set filter to alltrim(x_nom) $ ORASUNTO //Así funciona

         DbGotop() 
     else
            IF oMsgFilter != NIL
               ? oMsgFilter  --- objeto
                   oWndEdit:oMsgBar:DelItem(oMsgFilter)
                   ? oMsgFilter  --- objeto 
                   // oMsgFilter:= nil //nunca me deja poner el mensaje a nil me da error
          ENDIF

         set filter to
     endif
     
     oBrw:refresh()
     
 return nil
Saludos



Andrés González desde Mallorca
Posts: 989
Joined: Thu Nov 24, 2005 03:01 PM
Re: Que hago mal con set filter y oMsfItem...
Posted: Tue Mar 10, 2009 02:42 PM

Hola Andrés,

gusto de leerte.
La verdad es que no sé porqué te funciona el filtro, ya que la expresión " alltrim(x_nom) $ ORASUNTO " es que si alltrim(x_nom) está contenida en la variable ORASUNTO. Eso de que lo busque en indexkey() es un poco complejo, porque seguramente se hace una evaluación temprana del valor y no se actualiza registro a registro.

Yo probaría con &(IndexKey()), o mejor aún, alltrim(x_nom) $ OrdKeyVal(), y ya con esa seguro te queda todo ok (siempre y cuando todas las claves de todos los indices sean CHARs)

Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Posts: 632
Joined: Thu Jan 19, 2006 10:45 AM
Re: Que hago mal con set filter y oMsfItem...
Posted: Wed Mar 11, 2009 06:52 AM

Fenomenal Carlos, mira que hice un monton de pruebas y no lo conseguia. Con set filter to alltrim(x_nom) $ OrdKeyVal() ha funcionado.
Ahora la pregunta es si encuentras explicación a que no me deje poner oMsgFilter := nil ?

Ayer implemente tu ejemplo de CDO para los emails y va a las mil maravillas, era algo que tenia pendiente y me va a quitar mucho trabajo.

Saludos



Andrés González desde Mallorca
Posts: 632
Joined: Thu Jan 19, 2006 10:45 AM
Re: Que hago mal con set filter y oMsfItem...
Posted: Wed Mar 11, 2009 07:06 AM

Además lo que tu dices solo funciona en los que son del tipo char, en el resto el programa da error. Voy a ver como lo soluciono.

Saludos



Andrés González desde Mallorca

Continue the discussion