Fórum Filtro de uma Tabela #384426

24/08/2010

0

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

Eduardo

Responder

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
Responder

Gostei + 0

24/08/2010

Eduardo

Está dando erro no GROUP BY                
Responder

Gostei + 0

24/08/2010

Eduardo

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......
Responder

Gostei + 0

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... ]
Responder

Gostei + 0

24/08/2010

Eriley Barbosa

Diretamente na query
Responder

Gostei + 0

24/08/2010

Eduardo

Responder

Gostei + 0

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
Responder

Gostei + 0

24/08/2010

Eduardo

Agora da essa menssagem de erro   Field 'DTINI' is of unknown type
Responder

Gostei + 0

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.
Responder

Gostei + 0

24/08/2010

Eduardo

             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 .....
Responder

Gostei + 0

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;
Responder

Gostei + 0

24/08/2010

Eduardo

       Blz... mas agora deu  "Type mismatch in expression"       Acho que já estou incomodando ..... né ??
Responder

Gostei + 0

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;    
Responder

Gostei + 0

24/08/2010

Eduardo

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..!!!!!
Responder

Gostei + 0

24/08/2010

Eduardo

    Agora funcionou... !!!!   Brigadão...... Qualquer coisa eu escreve diretamento para vc, posso ???
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar