alexsnci 0 Denunciar post Postado Novembro 13, 2014 pessoal sou novato em delphi, estou finalizando um sistema para escola de informática, no entanto estou com dificuldades em criar um diário de frequência escolar, vi um modelo em um programa e achei interessante, gostaria de fazer parecido, vejam a imagem... então pessoal montar o formulário, usar os botões isso tudo eu consegui fazer, o X da questão é o seguinte: No banco de dados tenho apenas os campos: NOME (nome do aluno), TURMA (turma do aluno), CURSO (curso que o aluno está cursando); DISCIPLINA (disciplina que o aluno esta estudando); DATA (data da aula) ENTRADA (hora da entrada) SAÍDA (hora da saída); Então o que preciso! , que na tabela conforme a imagem acima, apareça os dias do mês em curso, que ao especificar uma data no campo data conforme imagem acima, na tabela, seja pintado a coluna referente ao dia a que foi escolhido, como exemplo na imagem, o campo DATA está 08/11/2014, na tabela está pintada a coluna correspondente ao dia 08, pessoal não sei nem por onde começar, quem puder me ajudem... Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Novembro 13, 2014 A query para obter dados na forma que você quer pode ser feita usando CASE com MAX ou SUM numa combinação para montar o PIVOT da forma requerida, talvez até algum objeto Delphi faça este PIVOT (Cross Reference) http://forum.imasters.com.br/topic/515040-listar-quantidade-de-pedidos-por-ms-sem-repetir-cliente/ Compartilhar este post Link para o post Compartilhar em outros sites
alexsnci 0 Denunciar post Postado Novembro 13, 2014 Olá Motta, muito obrigado por responder, e exatamente o que quero, no entanto precisarei de um pouco mais de detalhes, você pode me ajudar? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Novembro 13, 2014 Em que ? Compartilhar este post Link para o post Compartilhar em outros sites
alexsnci 0 Denunciar post Postado Novembro 13, 2014 Acho que estou entendendo... em seu post pra que o nome dos meses sejam colunas da dbgrid, é necessário que exista uma tabela com os nomes dos mesmos certo?.. Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Novembro 13, 2014 Creio que a sugestão que o nosso amigo Motta passou seria fazer um select neste estilo Alex. Fiz o exemplo a partir do SQL Server. create table #temp (data_entrada datetime) insert into #temp values ('2014-10-10 00:00:00') insert into #temp values ('2014-10-30 00:00:00') insert into #temp values ('2014-10-15 00:00:00') select data_entrada, Dia = CASE DAY(data_entrada) WHEN 01 THEN '01' WHEN 02 THEN '02' WHEN 03 THEN '03' WHEN 04 THEN '04' WHEN 05 THEN '05' WHEN 06 THEN '06' WHEN 07 THEN '07' WHEN 08 THEN '08' WHEN 09 THEN '09' WHEN 10 THEN '10' WHEN 11 THEN '11' WHEN 12 THEN '12' WHEN 13 THEN '13' WHEN 14 THEN '14' WHEN 15 THEN '15' WHEN 16 THEN '16' WHEN 17 THEN '17' WHEN 18 THEN '18' WHEN 19 THEN '19' WHEN 20 THEN '20' WHEN 21 THEN '21' WHEN 22 THEN '22' WHEN 23 THEN '23' WHEN 24 THEN '24' WHEN 25 THEN '25' WHEN 26 THEN '26' WHEN 27 THEN '27' WHEN 28 THEN '28' WHEN 29 THEN '29' WHEN 30 THEN '30' WHEN 31 THEN '31' END from #temp order by 1 Mas ainda assim irá precisar fazer um tratamento em código para definir quando será marcado ou não no grid a presença. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Novembro 13, 2014 Sim , seria +ou- pelo sql do Chrnos , select nome, max(case day(data) = 01 then (case entrada is null then ' ' else 'x' end) else ' ' end) "01" , max(case day(data) = 02 then (case entrada is null then ' ' else 'x' end) else ' ' end) "02" , ... where year(data) = '2014' and month(data) = '11' group by nome Compartilhar este post Link para o post Compartilhar em outros sites
alexsnci 0 Denunciar post Postado Novembro 13, 2014 O pessoal obrigado por responder, vou incrementar incrementar essas dicas em meu código, assim que estiver pronto posto o resultado.. Compartilhar este post Link para o post Compartilhar em outros sites