Filtro de uma Tabela
Bom dia queridos colaboradores......
Meu nome é Eduardo, estou desenvolvendo um programa em Delphi 3 para gerenciar a área de manutenção de uma micro-empresa:
O programa está quase pronto, porém falta a parte mais difícil para mim... os relatórios.......
Sei exatamente o que tenho que fazer para gerar esses relatórios mais não sei como.....
Consigo fazer alguns filtros básicos com SQL mas não estou conseguindo sair do lugar.
Aqui vai a estrutura do meu banco de Dados:
Nome: Tb_Execucao
Paradox
Cod_Preventiva N *
Cod_Execucao + *
Inicio @
Fim @
TotalParada N (Total de horas que uma máq. ficou parada)
ValorTotal $ (Valor total gasto na manutenção daquela maq)
Cod_Manutencao N (Se é Preventiva, Corretiva ou Preditiva)
Bom, como isso tem que funcionar: Sempre que eu faço uma manutenção em uma máquina ( manutenção esta pré-cadastrada em uma outra tela de cadastro de preventivas, cuja tabela se chama Tb_Preventiva, gerando um único código para cada tipo de preventiva) utilizando este código que é chamado de Cod_Preventiva eu vou dando baixa nassas manutenções e o programa gera um código automático “Cod_Execucao”, então em um determinado intervalo de tempo eu vou ter várias máquinas do mesmo modelo com o mesmo Cod_Preventiva mas cada uma com seus respectivos valores.
Preciso gerar um relatório por exemplo com as 5 máquinas que mais quebraram, ou as 5 máquinas que geraram mais custos, ou as 5 máquinas que ficaram mais tempo paradas........
Teoricamente o que eu tenho que fazer é....
1 – No Formulário (Form) eu tenho que entrar com as datas de inicio e fim ( em seus respectivos edit’s)
2 – Depois selecionar apenas os registros que estejam entre as datas mencionadas
3 - Verificar todas as máquinas com o mesmo código e somar todos os valores delas, de forma que eu tenha apenas 1 máquina de cada código com o valor total de todos os ítens referentes a ela.
4 - Depois organizar d tabela de forma que as que tenham os maiores valores fiquem em cima
5 - Escolher apenas as 5 primeiras, isto é, as 5 máquinas de maior valor ( por erxemplo, que mais quebrou, que teva maior gasto, que ficou mais tempo parada....)
6 - Colocar essas dados em um gráfico
COMO EU FAÇO ISSO ???? SOCORRO !!!!!!!!!
Eduardo
Curtidas 0
Respostas
Eriley Barbosa
24/08/2010
SELECT
Cod_Preventiva ,
Cod_Manutencao,
SUM(TotalParada) TotalParada,
SUM(ValorTotal ) ValorTotal
FROM
Tb_Execucao
WHERE Inicio >= :DTINI
AND Inicio <=:dtfim
GROUP BY
Cod_Preventiva
ORDER BY
TotalParada ASC, ValorTotal ASC
GOSTEI 0
Eduardo
24/08/2010
Está dando erro no GROUP BY
GOSTEI 0
Eduardo
24/08/2010
Tenho que digitar esses comandos diretamente na Query, ou no evento do meu botão para filtrar....???
Eu esqou querendo colocar no evento do botão......
GOSTEI 0
Eriley Barbosa
24/08/2010
Tem certeza, não esqueceu nenhum espaço, onde está testando? pois a sintaxe é esta abaixo:
SELECT [predicado { * | tabela.* | [tabela.]campo1 [AS alias1] [, [tabela.]campo2 [AS alias2] [, ...]]}
FROM expressãotabela [, ...] [IN bancodedadosexterno]
[WHERE... ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]
FROM expressãotabela [, ...] [IN bancodedadosexterno]
[WHERE... ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]
GOSTEI 0
Eriley Barbosa
24/08/2010
Diretamente na query
GOSTEI 0
Eduardo
24/08/2010
GOSTEI 0
Eriley Barbosa
24/08/2010
SELECT
Cod_Preventiva ,
Cod_Manutencao,
SUM(TotalParada) TotalParada,
SUM(ValorTotal ) ValorTotal
FROM
Tb_Execucao
WHERE Inicio >= :DTINI
AND Inicio <=:dtfim
GROUP BY
Cod_Preventiva, Cod_Manutencao
ORDER BY
TotalParada ASC, ValorTotal ASC
GOSTEI 0
Eduardo
24/08/2010
Agora da essa menssagem de erro
Field 'DTINI' is of unknown type
GOSTEI 0
Eriley Barbosa
24/08/2010
Clique na propriedade Params da query e configure dtini e dtfim com o mesmo tipo de dado do campo inicio.
GOSTEI 0
Eduardo
24/08/2010
Beleza.... concegui ativar a Query....
Mas meu DbGrid ficou em branco......
Como vou jogar os valores da data inicial e final ????
Tenho dois campos, Edit_Inicio e Edit_Fim .....
GOSTEI 0
Eriley Barbosa
24/08/2010
Troque seus dois edits por 2 DateTimePicker da palheta Win32 e coloque um botão e digite:
SuaQuery.Close;
SuaQuery.params[0].Value := DateTimePicker1.Date;
SuaQuery.params[1].Value := DateTimePicker2.Date;
SuaQuery.Open;
GOSTEI 0
Eduardo
24/08/2010
Blz... mas agora deu "Type mismatch in expression"
Acho que já estou incomodando ..... né ??
GOSTEI 0
Eriley Barbosa
24/08/2010
Tem certeza que o campo Inicio é um campo que armazena uma Data?
Os parametros estão com o DataType Date?
Tente assim:
SuaQuery.Close;
SuaQuery.params[0].AsDateTime := DateTimePicker1.Date;
SuaQuery.params[1].AsDateTime := DateTimePicker2.Date;
SuaQuery.Open;
GOSTEI 0
Eduardo
24/08/2010
Sim está como @ (DateTime), por que eu preciso saber quantas horas a máquina ficou parada, e se coloco só hora quando passa de 23:59 dá zero....
Bom, não está dando mais erro, mas o DbGrid está em branco ......
Antes de tudo eu quero lhe agradecer pela ajuda.....
Você está me quebrando um galhão..!!!!!
GOSTEI 0
Eduardo
24/08/2010
Agora funcionou... !!!!
Brigadão...... Qualquer coisa eu escreve diretamento para vc, posso ???
GOSTEI 0
Eriley Barbosa
24/08/2010
Tente com AsDate no lugar de AsDateTime.
GOSTEI 0
Eriley Barbosa
24/08/2010
Sempre pelo forum, pois, sua duvida pode ajudar outras pessoas
GOSTEI 0
Carlos Mazzi
24/08/2010
Boa jovem ERILEY , parabens!, vlw.
GOSTEI 0