Fórum Filtro de uma Tabela #384426
24/08/2010
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 !!!!!!!!!
Posts
24/08/2010
Eriley Barbosa
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
Está dando erro no GROUP BY
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......
24/08/2010
Eriley Barbosa
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... ]
24/08/2010
Eriley Barbosa
Diretamente na query
24/08/2010
Eriley Barbosa
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
Agora da essa menssagem de erro
Field 'DTINI' is of unknown type
24/08/2010
Eriley Barbosa
Clique na propriedade Params da query e configure dtini e dtfim com o mesmo tipo de dado do campo inicio.
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 .....
24/08/2010
Eriley Barbosa
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;
Blz... mas agora deu "Type mismatch in expression"
Acho que já estou incomodando ..... né ??
24/08/2010
Eriley Barbosa
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;
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..!!!!!
Agora funcionou... !!!!
Brigadão...... Qualquer coisa eu escreve diretamento para vc, posso ???