Pesquisa em Campo Claculado

Delphi

08/01/2004

Olá...

Preciso de uma informação, estou desnvolvendo um sistema e num determinado momento da pesquisa eu preciso calcular um total e mostar no resulatdo somente os registros filtrados na faixa determinada, mas o total ta em cum campo calculado.

Como posso fazer ???

Estou usando ADOQuery e Acces

Valeu ...


Fabioluis

Fabioluis

Curtidas 0

Respostas

Motta

Motta

08/01/2004

Vc pode dar mais detalhes.

Vc quer fazer um filtro num dbgrid , localizar os registros ?

Tem a prop Filter que permiter estabelecer um Filtro, porém a campo aqui não pode ser calculado

ex

VALOR_UNIT
QTD
fVenda

onde fVenda é calculado

tente

Filter := ´VALOR_UNIT * QTD = 12345´
fILTERED := true;

não estou certo que a sintaxe vai funcionar mas faça um teste


GOSTEI 0
Fabioluis

Fabioluis

08/01/2004

Bom deixa eu tentar explicar melhor ..

é uma tela de pesquisa onde eu filtro as caracteristicas de equipamentos, como modelo, tipo etc ... e coloco tudo num DBGrid
só que agora eu preciso filtrar tambem por preço, tipo entre 10.000,00 e 20.000,00.
só que eu só calculo o preço quando faço a pequisa, pois o preço depende do usuário logado.. por causa da margem de desconto.

Até a parte dos claculos está tudo funcionando.. mas ai não consigi filtrar pela faixa ..

As outras comparaçoes que não eram campo calculado estão funcionando,
pois eu tenho um campo na tabela pra compar, mas aki não, eu tenho que comparar o Campo calculado com os Edits que estão na tela.


Num tem muito código .. pq to usando parametros no SQL e depois passo pelo parameter da query !!


Deu pra entender ??


Valeu !!!


GOSTEI 0
Fabioluis

Fabioluis

08/01/2004

a minha query é a sguinte !!!

SELECT
E.* , M.Marca, T.Tipo, Tc.Tecnologia, F.Formato, c.Color
FROM
Equipamento E, Marca M, Tipo T, Tecnologia Tc, Formato F,
Color c
WHERE
E.eq_cod_Marca = M.cod_Marca AND
E.eq_cod_Tipo = T.cod_Tipo AND
E.eq_cod_Tecnologia = Tc.cod_Tecnologia AND
E.eq_cod_Formato = F.cod_Formato AND
E.eq_cod_Color = C.cod_Color AND
E.eq_cod_Equipamento LIKE :cod_Equipamento AND
E.eq_Modelo LIKE :Modelo AND
M.Marca LIKE :Marca AND T.Tipo LIKE :Tipo AND
Tc.Tecnologia LIKE :Tecnologia AND
F.Formato LIKE :Formato AND
C.Color LIKE :Color AND
E.eq_Capacidade BETWEEN :Capac1 AND :Capac2 AND
E.eq_velocidade_pb BETWEEN :Velpb1 AND :Velpb2 AND
E.eq_velocidade_cl BETWEEN :Velcl1 AND :Velcl2
ORDER BY
E.eq_cod_Equipamento



e o meu campo calculado é :


//Calcula o Custo Liquido
qryConsEquipCusto_Liquido.AsFloat := qryConsEquipeq_Custo_Bruto.AsFloat * (
1 - (( qryConsEquipeq_Icmsc.AsFloat / 100) /(
1 + qryConsEquipeq_Ipi.AsFloat / 100)));

//Calcula o Preço de Venda ... com indice padrão
qryConsEquipPreco_Venda.AsFloat := qryConsEquipCusto_Liquido.AsFloat / (
1 - ((qryConsEquipeq_Icmsv.AsFloat + qryConsEquipeq_Impostos.AsFloat +
_dmMain.qryUsuarioMargem.AsFloat) / 100));



se puder me ajudar ..

Valeu !!!


GOSTEI 0
Marcelo.l

Marcelo.l

08/01/2004

Olá.

Vc pode utilizar o evento OnFilterRecord de seu Dataset.

Nele existe o parametro ´Accept´ que vc pode utilizar da seguinte forma.

Accept := (qryConsEquipCusto_Liquido.AsFloat >= 10.000) and (qryConsEquipCusto_Liquido.AsFloat <= 20.000);

Serão filtrados todos os registros que se encaixem na condição.

Espero ter ajudado.


GOSTEI 0
Fabioluis

Fabioluis

08/01/2004

Mas o custo liquido é um campo calculado .. num tem problema ????

eu tentei e num tá filtrando .. o que pode ser ??


GOSTEI 0
Marcelo.l

Marcelo.l

08/01/2004

Como eu disse serão filtrados todos os registros que se encaixem na condição.

Não importa se o campo for calculado.

Não esqueça de ´setar´ a propriedade Filtered para true de seu dataset.

Pode ser em tempo de design ou execução.

Vai com fé que funciona.

Qualquer dúvida estamos aí.

T+


GOSTEI 0
Fabioluis

Fabioluis

08/01/2004

Mas o custo liquido é um campo calculado .. num tem problema ???? eu tentei e num tá filtrando .. o que pode ser ??


Ahh os parametros da faixa de filtro estão em 2 edits, como faço para trazer pra query ??

Valeu


GOSTEI 0
Marcelo.l

Marcelo.l

08/01/2004

Vou supor que vc utilizou da seguinte forma:

Edt1 para valor inicial
Edt2 para valor final

Fica assim dentro do evento OnFilterRecord:

Accept := (qryConsEquipCusto_Liquido.AsFloat >= StrToFloat(Edit1.Text)) and (qryConsEquipCusto_Liquido.AsFloat <= StrToFloat(Edit2.Text));

Como eu disse não se esqueça de setar a propriedade Filtered para TRUE.


Me avise se funcionar ou não.

T+


GOSTEI 0
Fabioluis

Fabioluis

08/01/2004

eu tentei isso mas os edits não aprecem ai eu inclui no users o form, mas mesmo assim num apareceu .. o que posso fazer ???

o resto da dica funcionou bem !!!

obrigado ...


GOSTEI 0
Fabioluis

Fabioluis

08/01/2004

eu tentei isso mas os edits não aprecem ai eu inclui no users o form, mas mesmo assim num apareceu .. o que posso fazer ??? o resto da dica funcionou bem !!! obrigado ...


Tentei tb colocar o form.edit1.text .. mas ai deu erro de violaçao de acesso quendo vai abrir o form !!!


GOSTEI 0
Fabioluis

Fabioluis

08/01/2004

Bom só pra agradecer a todos .. eu consegui, não sei se da forma mais correta .. mas pelo menos funcionlou .. se alguem tiver alguma sugestão eu aceito ..

Como trabalho com Datamodule eu tive que criar uma variavel global para cada campo do edit ai funcionou !!!

valeu !!!!


GOSTEI 0
POSTAR