Página 1 de 1

Selecionar dados de um determinado mes

Enviado: 12 Jun 2006 15:24
por mmaciel11
Amigos,

Boa tarde a todos,

o negocio é o seguinte como faço para selecionar os dados de um determinado mes e trata-lo (JA USEI O SET FILTER SO QUE FICOU MUITO LENTO AS OPERAÇOES DEPOIS DE SELECIONADOS TEM QUE INCLUIR, EXCLUIR ) HOJE UTILIZO UM ARQUIVO TEMPORARIO COM BROWSE(), TENHO QUE MOSTRAR OS DADOS PARA O USUARIO NA HORA DA MOVIMENTAÇÃO (ACHO LEGAL ASSIM) ME DEEEM UMA LUZ POR FAVOR..


AGRADECO

uso clipper 5.3b+belinker 7.0 + llibg[/b]

Enviado: 12 Jun 2006 17:08
por MARCELOG
Esse é um (dos muitos) trecho de código que foi disponibilizado pelo dudu_xbase.
Não é lento e funciona legal.
Neste exemplo ele filtra pelo código do cliente, mas você pode filtrar por qualquer campo.
Veja onde mudar (de vermelho) para "filtrar" a sua pesquisa direto no banco de dados.
Substitua o bloco de código com a sua condição de filtro.

dbselectarea ("propri")
dbsetorder (1) // indice pelo codigo do caboclo

// procuro o caboclo
dbseek(clientes->CODCLI)


/* crio tbrowse */
oPropri := tbrowsedb (12,03,19,76)

/* filtro tbrowse com a função skipwhil() */
oProPri:SKIPBLOCK := {|x| SKIPWHIL(x, {||propri->CODCLI== clientes->CODCLI})}
oPropri:GOTOPBLOCK := {| | SKIPWHIL((LASTREC()* -1),{||propri->CODCLI== clientes->CODCLI})}
oproPri:GOBOTTOMBLOCK := {| | SKIPWHIL((LASTREC()* 1), {||propri->CODCLI== clientes->CODCLI})}

/* defino separadores do tbrowse */
oPropri:colorspec := "w+/bg+,n/w,n,n,w/bg+,g/bg+,gr+/w"
oProPri:colsep := chr (032) + chr (179) + chr (032)
oPropri:headsep := chr (196) + chr (194) + chr (196)
oPropri:footsep := chr (196) + chr (193) + chr (196)

/* defino colunas do tbrowse */
oCol1 := tbcolumnnew("Codigo", {||propri->CODCLI })
oCol2 := tbcolumnnew("Propriedade",{||propri->PROPRIED })

oProPri:addcolumn(oCol1)
oPropri:addcolumn(oCol2)

/*Congelo a Primeira Coluna frescura minha...*/
oPropri:freeze := 1

oProPri:gotop()
while ( .t. )

setcursor (0)

while ( !oPropri:stabilize () )
enddo

nTecla := inkey (0)

do case

case ( nTecla == K_ESC )
exit

case ( nTecla == K_DOWN )
oPropri:down ()

case ( nTecla == K_UP )
oPropri:up ()

case ( nTecla == K_LEFT )
oPropri:left ()

case ( nTecla == K_RIGHT )
oPropri:right ()

case ( nTecla == K_PGUP )
oPropri:pageup ()

case ( nTecla == K_PGDN )
oPropri:pagedown ()

case ( nTecla == K_CTRL_PGUP )
oPropri:gotop ()

case ( nTecla == K_CTRL_PGDN )
oPropri:gobottom ()



endcase

oPropri:refreshall()
enddo


/**********
*
* SKIPWHIL ()
*
* Esta funcao 'e auxiliar dos browsers, e serve para fazer filtros...
* Dudu_Xbase : 23/05/1997 fununcionou... *:)
*
**********/

function SKIPWHIL (x,key_val)

local i := 0

if lastkey() == 0
return i
endif

if (x > 0 .and. recno() <> lastrec()+1)
do while (i < x)
skip 1
if eof() .or. !(eval(key_val))
skip -1
exit
endif
i++
enddo
elseif (x < 0)
do while (i > x)
skip -1
if bof()
exit
endif
if !(eval(key_val))
skip 1
exit
endif
i--
enddo
endif

return i

Esperto ter ajudado.

MarceloG

Enviado: 12 Jun 2006 17:43
por mmaciel11
vou testar e depois posto aqui.

abraços

marcos maciel

MARCELOG

Enviado: 13 Jun 2006 11:20
por Sergio_ASSilva
Oi marcelo,
Tentei usar o dbedit com filtro duplo onde a concao seria m->cd_cleinte = cxa03000->cd_cliente e cxa0300->deb_atual <> 0.00 e nao funcionou, sera que posso usa esta funcao com esta condicao ?

Grato,


Sérgio

Enviado: 13 Jun 2006 11:27
por MARCELOG
Tudo bem, vai funcionar.