Jump to content
Fivewin Brasil

Uso de Between


jfaguiar

Recommended Posts

De que linguagem é esse BETWEEN? E o que ele faria nesse filtro?

Eu acho que você deve usar o FOR... ou WHILE... mas...

                  IF CADPARAM->TPAMB = [1]
 
                     SET FILTER TO ( .NOT. EOF() )            .AND. ;
                                   CADNFE->NFECOD    >= NNOTAINI .AND. ;     // alterado 31/08/2009
                                   CADNFE->NFECOD    <= NNOTAFIN .AND. ;
                                   CADNFE->STATUS     = "IMP"    .AND. ;
                                   CADNFE->TPFAT_OP   = "P"      .AND. ;
                                   CADNFE->PROTOCOLO != [ ]
 
                  ELSE
 
                     SET FILTER TO ( .NOT. EOF() )              .AND. ;
                                   CADNFE->FATURCOD >= NNOTAINI .AND. ;
                                   CADNFE->FATURCOD <= NNOTAFIN .AND. ;
                                   CADNFE->STATUS    = "IMP"    .AND. ;
                                   CADNFE->TPFAT_OP  = "P"
 
                  ENDIF
Link to comment
Share on other sites

Amiguinhos,

Baseado na postagem do amigo toya, vejamos:

#INCLUDE "FIVEWIN.CH"

#command SET FILTER TO <x> BETWEEN <y>,<z> SCOPED                         ;
        =>    OrdScope( 0, <y> )                                          ;
         ;    OrdScope( 1, <z> )                                          
         
FUNCTION MAIN
  REQUEST DBFCDX
  RDDRegister('DBFCDX',1)
  RDDSetDefault('DBFCDX')

  // Indexado pelo campo IDCLIENTE por STR(IDCLIENTE,5,0)
  USE CLIENTES EXCLUSIVE INDEX CLIENTES

  SET FILTER TO
  SET ORDER TO 2 // Ordem pelo campo IDCLIENTE
  SET FILTER TO IDCLIENTE BETWEEN STR(15,5,0), "   30" SCOPED
  BROWSE()

RETURN

O fato de usar o RDDCDX já implica em alta performance no que tange a velocidade de filtragem e composição.

Já no tradicional SET FILTER a perda de tempo em relação as filtragens é percepitível.

Link to comment
Share on other sites

Amiguinhos,

Aqui nesta implementação uso somente o SET FILTER TO expressão

A implementação ficou horrível, mas funciona. Quem puder melhorar, por favor...

#INCLUDE "FIVEWIN.CH"

#command SET FILTER TO BETWEEN , => ;
         dbSetFilter( {||\>=.and.\<=} , <"x">+">="+<"y">+".and."+<"x">+"<="+<"z"> )


FUNCTION MAIN
   REQUEST DBFCDX
   RDDRegister('DBFCDX',1)
   RDDSetDefault('DBFCDX')

   USE CLIENTES EXCLUSIVE

   // Padrão normal
   SET FILTER TO
   SET FILTER TO IDCLIENTE >= 11 .And. IDCLIENTE <= 15
   BROWSE()

   // Padrão definido pelo usuário
   SET FILTER TO
   SET FILTER TO IDCLIENTE BETWEEN 11, 30
   BROWSE()

RETURN
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...