António44 Postado Dezembro 6, 2008 Denunciar Share Postado Dezembro 6, 2008 Boa tarde amigos será que me podem ajudar?Fiz um programa para gestão de treinos num campo de futebolTreinam varias equipas e em varios escalões todos os dias.exemplo:Olhanense -InfantisOlhanense -iniciadosOlhanense -JuvenisOlhanense -junioresOlhanense -SenioresOlhanense -VeteranosMaritimo _ '''''''MAritimo -'''''''Fuseta _''''''Fuseta -''''''' e por ai fora...é tudo regiatado em tabela Paradox com os seguites campos.Data,Clube,Escalão,NºAtletas,tempo de utilização.O que preciso é filtrar entre datas dos resultados desta tabela onde apareça só uma linha para cada clube e escalão. Clube ,escalão,Total Atletas ,total de registos para cada escalão e média de atletas.Exemplo:Maritimo,Iniciados,300,100 presenças,media=3 Atletas Maritimo,Juniores ,200 ,100 presenças,Média=2 Atletas Olhanense,Veteranos,100 ,10 Presenças,Média=10 Atletasserá possivel filtrar estes dados e mete-los numa report para impressão.?Eu ao filtrar aparece os registos todos,isto é de todas as presenças.Meu E-mailabotinas@sapo.pt Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 António44 Postado Dezembro 16, 2008 Autor Denunciar Share Postado Dezembro 16, 2008 Algum amigo pode ajudar ai ? É que não estou conseguindo resolver isto... :rolleyes: Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Dezembro 17, 2008 Denunciar Share Postado Dezembro 17, 2008 mas o TQRExpr com a propriedade Expression contendo COUNT vai somando os valores anteriores se no 1º grupo tem 10 marcações e no segundo 5 =15 onde devia ser '5' sumou e ainda,na soma de atletas faz a mesma coisa,e no QRLabel1.Caption := FormatFloat('0.00', QRExpr1.Value.dblResult/QRExpr2.Value.dblResult);o valor é 1.00...António44, faltou você dar uma olhada com "carinho" nas propriedades do seu TQRExpr. Olhe na janela Object Inspector as propriedades e você verá que existe uma chamada ResetAfterPrint - sugestivo não?! ;) Marque ela com True.Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 António44 Postado Dezembro 17, 2008 Autor Denunciar Share Postado Dezembro 17, 2008 (editado) Eu dei a olhada com carinho... se não fosse você estaria olhando o resto da vida...obrigado. E deu certo sumou os valores todos bem, o valor da media não?QRLabel1.Caption := FormatFloat('0.00', QRExpr1.Value.dblResult/QRExpr2.Value.dblResult);o valor é 1.00.Usei QRExpr2.Expression(AVERAGE) e tá dando a Média,não sei se quando o numero de registos aumentar ele fica bem...espero que sim.e tb tenho outro problema quando a Report passa das 2 paginas gera um erro (Cannot Create file...Metafile is not valid)...? se voltar a aceder ao Report programa bloqueia, que chatice isto das reports :wacko: uso este code no botão da report será que está certo ou pode ser mais elaborado ?procedure TForm1.FlatSpeedButton19Click(Sender: TObject); begin with Report2 do begin Query1.Active := false; Query1.Params[0].AsDate := Form1.DateEdit1.Date; Query1.Params[1].AsDate := Form1.DateEdit2.Date; Query1.Prepare; Query1.Active := true; QuickRep1.preview; end; end;Aqui tb no - TQRGroup (3º) com a propriedade Expression contendo o campo NomeEscalão se tiver só um registo ele fica com um espaço pequeno mas se tiver 20 e por ai fora ele vai alongando o espaço...? tem maneira de manter sempre com o mesmo espaço mesmo que o numero de registos aumentem? é que assim se tiver 100 ou 1000 registos de um escalão fica um espaço em branco enorme eu já olhei com carinho...e nada .Abraço. Editado Dezembro 17, 2008 por António44 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 António44 Postado Dezembro 18, 2008 Autor Denunciar Share Postado Dezembro 18, 2008 (editado) tb tenho outro problema quando a Report passa das 2 paginas gera um erro (Cannot Create file...Metafile is not valid)...? se voltar a aceder ao Report programa bloqueia, que chatice isto das reports Estive aqui a fazer uns testes e reparei que no meu Micro funciona tudo lindamente sem erro tenho 1.6GHz e 500 MB Ram mas o CPU vai até aos 97% e fica ali até que fecho o Preview do Report e no outro Micro onde dá erro tem 3.2Ghz e 256 MB Ram acontesse que roda o XP e eu estive a ver na memória disponivel ele tem apenas de 233696 sobra 50896 ou seja 50 MB Ram livres...será isto que faz com que ao criar o Report gera erros e bloqueia o programa...? o Report Preview é carregado na memória quando é chamado..? tenhgo duvida aqui se você Micheus me souber dizer qualquer coisa sobre isto eu agradeço.Abraços.Aqui tb no - TQRGroup (3º) com a propriedade Expression contendo o campo NomeEscalão se tiver só um registo ele fica com um espaço pequeno mas se tiver 20 e por ai fora ele vai alongando o espaço...? tem maneira de manter sempre com o mesmo espaço mesmo que o numero de registos aumentem? é que assim se tiver 100 ou 1000 registos de um escalão fica um espaço em branco enorme eu já olhei com carinho...e nada .Problema tá resolvido olhei com mais carinho e retirei o TQRBand com BandType=rbDetail assim fica sem espaço em branco e o que preçiso mesmo é só a contagem.Obrigado Micheus.Abraço. Editado Dezembro 18, 2008 por António44 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Dezembro 19, 2008 Denunciar Share Postado Dezembro 19, 2008 QRLabel1.Caption := FormatFloat('0.00', QRExpr1.Value.dblResult/QRExpr2.Value.dblResult);o valor é 1.00.António44, pode ter relação com aquele comentário que fiz sobre multiplicar o resultado da função por 1 (na expression).Usei QRExpr2.Expression(AVERAGE) e tá dando a Média,não sei se quando o numero de registos aumentar ele fica bem...espero que sim.Perfeito! Não lembrei dele. :blush: tb tenho outro problema quando a Report passa das 2 paginas gera um erro (Cannot Create file...Metafile is not valid)...? se voltar a aceder ao Report programa bloqueia, que chatice isto das reportsEstive aqui a fazer uns testes e reparei que no meu Micro funciona tudo lindamente sem erro tenho 1.6GHz e 500 MB Ram mas o CPU vai até aos 97% e fica ali até que fecho o Preview do Report e no outro Micro onde dá erro tem 3.2Ghz e 256 MB Ram acontesse que roda o XP e eu estive a ver na memória disponivel ele tem apenas de 233696 sobra 50896 ou seja 50 MB Ram livres...será isto que faz com que ao criar o Report gera erros e bloqueia o programa...? o Report Preview é carregado na memória quando é chamado..? tenhgo duvida aqui se você Micheus me souber dizer qualquer coisa sobre isto eu agradeço.Como você disse anteriormente que utiliza ainda o Delphi 3, é 99,999% de chance que seu problema seja este pelo qual eu já passei: Bug Com Quickreport 2 - D3 - veja a excelente explicação do colega Churc.... e retirei o TQRBand com BandType=rbDetail assim fica sem espaço em branco e o que preçiso mesmo é só a contagema questão dos espaços em branco, não é problema. Sempre que preciso usar uma bando para fazer algum tipo de operação em seus eventos, mas não mostro nada nelas, eu simplesmente altero a propriedade height para zero na inicialização do reletório. Quanto a retirada da banda rbDetail, eu nunca havia feito um relatório sem ela, então, não sei lhe dizer se isto tem algum efeito colateral.Já a parte da "contagem", não entendi a que se refere - não achei referência ao problema nos posts acima. :huh: Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 António44 Postado Janeiro 2, 2009 Autor Denunciar Share Postado Janeiro 2, 2009 (editado) Select extract(year from data) as Ano, extract(month from data) as Mes, T.* from Agenda T where data between :DataIni and :DataFim Order by 1, 2, Clube,EscalaoUsando assim este SQL tenho que usar dois DateTimePicker.O que eu pergunto é o que posso alterar para que em lugar da busca ser feita entre datas ser feita por ano,como extrair só o ano da DataIni ?? e isto terá que ser alterado...where data between DataIni and :DataFim.Eu quero um formulário que consulte o ano sem ter que meter a dataIni em 01-01-2008 e DataFim 31-12-2008 bastava que o dataIni tivesse em qualquer data de 2008 só para extrair o ano.Abraço a todos e bom ano. Editado Janeiro 2, 2009 por António44 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Janeiro 2, 2009 Denunciar Share Postado Janeiro 2, 2009 (editado) Usando assim este SQL tenho que usar dois DateTimePicker.Claro que não!Se estiver usando o D7 (ou posterior - anteriores não sei se tem a função), você pode incluir a unit DateUtils ao seu projeto e usar as funções StartOfTheMonth e EndOfTheMonth.Assim, você usa a data informada para obter o primeiro dia do mês e o último e passa estes valores aos parâmetros:... Query1.Params[0].AsDate := StartOfTheMonth(Form1.DateEdit1.Date); Query1.Params[1].AsDate := EndOfTheMonth(Form1.DateEdit1.Date); ... O que eu pergunto é o que posso alterar para que em lugar da busca ser feita entre datas ser feita por ano,como extrair só o ano da DataIni ?? e isto terá que ser alterado...where data between DataIni and :DataFim. Eu quero um formulário que consulte o ano sem ter que meter a dataIni em 01-01-2008 e DataFim 31-12-2008 bastava que o dataIni tivesse em qualquer data de 2008 só para extrair o ano.Neste caso você está ciente que não estará fazendo a consulta por período, certo?! baseado no SQL que você postou acima: Select extract(year from data) as Ano, extract(month from data) as Mes, T.* from Agenda T where extract(year from data) = extract(year from :Data) Order by 1, 2, NomeClube, NomeEscalão Order by 1, 2, Clube,Escalaoassim, você terá apenas que passar o valor para o parâmetro Data.AbraçosMotivo edição: acrescentado a palavra WHERE no SQL. Editado Janeiro 3, 2009 por Micheus Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 António44 Postado Janeiro 3, 2009 Autor Denunciar Share Postado Janeiro 3, 2009 (editado) Select extract(year from data) as Ano, extract(month from data) as Mes, T.* from Agenda T where data between :DataIni and :DataFim Order by 1, 2, Clube,Escalao Assim dá certinho mas usando os dois dateTimePicker entre datas. SQL Select extract(year from data) as Ano, extract(month from data) as Mes, T.* from Agenda T extract(year from data) = extract(year from :Data) Order by 1, 2, NomeClube, NomeEscalão Order by 1, 2, Clube,EscalaoMicheus eu uso o velhinho D3 não tem essa unit DateUtils, assim dá erro ''Invalid use of Keyword. Token: extract(yearabraço. Editado Janeiro 3, 2009 por António44 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Janeiro 3, 2009 Denunciar Share Postado Janeiro 3, 2009 (editado) Use estas que vão funcionar:function StartOfTheMonth(aDate :TDateTime) :TDateTime; var D, M, A :Word; begin DecodeDate(aDate, A, M, D); Result := EncodeDate(A,M, 1); end; function EndOfTheMonth(aDate :TDateTime) :TDateTime; var D, M, A :Word; begin Result := StartOfTheMonth(aDate) +32; // forçamos uma data no mês seguinte Result := StartOfTheMonth(Result) -1; // pegamos o último dia do mês end;''Invalid use of Keyword. Token: extract(yearDeve haver algo na hora que você monta a string, pois como você pode ver, esta instrução já é usado no SELECT.Poste o código da parte em que você monta a instrução SQL.Abraços Editado Janeiro 3, 2009 por Micheus Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 António44 Postado Janeiro 3, 2009 Autor Denunciar Share Postado Janeiro 3, 2009 (editado) unit UnitRelatorio; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, TFlatSpeedButtonUnit, ExtCtrls, yupack, Grids, DBGrids, ComCtrls,Quickrpt, StdCtrls, Mask, ToolEdit, TFlatComboBoxUnit; type TRelatorio = class(TForm) YusoftWallpaper1: TYusoftWallpaper; Panel1: TPanel; FlatSpeedButton1: TFlatSpeedButton; FlatSpeedButton2: TFlatSpeedButton; Date1: TDateEdit; Date2: TDateEdit; Bevel1: TBevel; FlatSpeedButton3: TFlatSpeedButton; FlatSpeedButton4: TFlatSpeedButton; FlatSpeedButton5: TFlatSpeedButton; FlatSpeedButton6: TFlatSpeedButton; procedure FlatSpeedButton1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FlatSpeedButton2Click(Sender: TObject); procedure FlatSpeedButton3Click(Sender: TObject); procedure FlatSpeedButton4Click(Sender: TObject); procedure FlatSpeedButton5Click(Sender: TObject); procedure FlatSpeedButton6Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Relatorio: TRelatorio; implementation uses Unit1,UnitDM, UnitReport1, Manygrp, Unit3, UnitReport4, UnitBotoes; {$R *.DFM} function StartOfTheMonth(aDate :TDateTime) :TDateTime; var D, M, A :Word; begin DecodeDate(aDate, A, M, D); Result := EncodeDate(A,M, 1); end; function EndOfTheMonth(aDate :TDateTime) :TDateTime; var D, M, A :Word; begin Result := StartOfTheMonth(aDate) +32; // forçamos uma data no mês seguinte Result := StartOfTheMonth(Result) -1; // pegamos o último dia do mês end; procedure TRelatorio.FlatSpeedButton1Click(Sender: TObject); begin Close; end; procedure TRelatorio.FormCreate(Sender: TObject); begin Form1.Enabled:=False; DecimalSeparator:='.'; Date1.Text:=(Datetostr(Date)); Date2.Text:=(Datetostr(Date)); end; procedure TRelatorio.FormClose(Sender: TObject; var Action: TCloseAction); begin Form1.Enabled:=true; release; end; procedure TRelatorio.FlatSpeedButton2Click(Sender: TObject); begin With ManyGrpForm do begin RepQuery.Active := false; RepQuery.Params[0].AsDate := Date1.Date; RepQuery.Params[1].AsDate := Date2.Date; RepQuery.Prepare; RepQuery.Active := true; QuickRep.preview; end; end; procedure TRelatorio.FlatSpeedButton3Click(Sender: TObject); begin With Report3 do begin Query1.Active := false; Query1.Params[0].AsDate := Date1.Date;; Query1.Params[1].AsDate := Date2.Date;; Query1.Prepare; Query1.Active := true; QuickRep1.preview; end; end; procedure TRelatorio.FlatSpeedButton4Click(Sender: TObject); begin With Report1 do begin Query1.Active:=false; Query1.Prepare; Query1.Active:=true; Preview; end; end; procedure TRelatorio.FlatSpeedButton5Click(Sender: TObject); begin With Report4 do begin Query1.Active := false; Query1.Params[0].AsDate := StartOfTheMonth(Date1.Date); //eu uso aqui no Report4 Query1.Params[1].AsDate := EndOfTheMonth(Date1.Date); //Query1.Params[0].AsDate := Date1.Date; desabilitado //Query1.Params[1].AsDate := Date2.Date; Desabilitado Query1.Prepare; Query1.Active := true; QuickRep1.preview; end; end; procedure TRelatorio.FlatSpeedButton6Click(Sender: TObject); begin botoes:=Tbotoes.Create(self); botoes.show; end; end.Dá erro ''List index out of bounds(1)Voc~e entendeu a ideia é filtrar por ano dar tudo de 2008 sem meter datas.Da tb as variabe D,M,A is declared bat never used in EndOfTheMonth. Editado Janeiro 3, 2009 por António44 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Janeiro 3, 2009 Denunciar Share Postado Janeiro 3, 2009 António44, esta parte não serve.Eu me referia ao conteúdo da propriedade SQL das suas queries. Agora deu para ver que você não está criando a consulta em run-time, ou seja, digitou o a instrução direto dentro da propriedade em design-time. Também, observa-se que você usou vários TQuery, então é interessante que você verifique aquele em que o erro está acontecendo. Eu olhei melhor a sua última query postada e observei que você não colocou a palavrinha WHERE antes do extract, do mesmo modo como eu havia esquecido no meu post. Tente observar o que está fazendo - não confie em tudo que a gente passa, porque podemos errar também. ;)Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Janeiro 3, 2009 Denunciar Share Postado Janeiro 3, 2009 Dá erro ''List index out of bounds(1)Voc~e entendeu a ideia é filtrar por ano dar tudo de 2008 sem meter datas.Eu sim, mas não sei se você entendeu o que eu postei antes.A questão de usar o extract, daquele modo, tem como objetivo fazer a comparação apenas com o ano da data passada como parâmetro. Que neste caso, pode ser apenas uma data.Eu não entendi o fato de você usar dois componentes para data (voce disse que queria usar apenas um), bem como não entendi o fato de você usar Query1 em dois pontos diferentes do código, sem mudar sua consulta SQL, mas em um lugar você passa duas datas como parâmetro (FlatSpeedButton3Click) e em outro não passa nada (FlatSpeedButton4Click). Neste caso, você vai em algum momento obter sim "List index out of bounds".Da tb as variabe D,M,A is declared bat never used in EndOfTheMonth.Coisas de copiar colar e postagem sem atenção. :blush: Isso é só uma advertência - não erro. Voce deve remover estas declarações porque realmente não são necessárias. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 António44 Postado Janeiro 3, 2009 Autor Denunciar Share Postado Janeiro 3, 2009 (editado) procedure TRelatorio.FlatSpeedButton6Click(Sender: TObject); begin botoes:=Tbotoes.Create(self); botoes.show; end; eu uso uma form para escolher o tipo de Report que se quer.E tambem uso uma TQuerry para cada Report.Esta é que tá dando erro...SQLSELECTextract(year from data) as Ano, extract(month from data) as Mes, T.*from Agenda TWHERE extract(year from data) = extract(year from :Data)Order by 1, 2, Clube,Escalao Dá erro ''List index out of bounds(1).Dá tb a variabe D,M,A ''is declared bat never used in EndOfTheMonth''. ...não é erro perdoe-me sou inesperiente. :wacko: FlatSpeedButton4Click é para ver um relatório mas mas não é entre datas.Da as variabe D,M,A is declared bat never used in EndOfTheMonth. posso remover elas é isso? Editado Janeiro 3, 2009 por António44 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Janeiro 3, 2009 Denunciar Share Postado Janeiro 3, 2009 E tambem uso uma TQuerry para cada Report.é eu já estou surtando mesmo. As Query1 eram de forms diferentes. :blush: Esta é que tá dando erro...SELECTextract(year from data) as Ano, extract(month from data) as Mes, T.*from Agenda TWHERE extract(year from data) = extract(year from :Data)Order by 1, 2, Clube,Escalao Dá erro ''List index out of bounds(1)., mas você está passando parâmetros para ela? Em qual botão você está fazendo isto?Ou, por outro lado, você alterou esta SQL, então por acaso você não esqueceu de alterar a propriedade Params, de modo a ter agora o parâmetro Data, ao invés de DataIni e DataFim?FlatSpeedButton4Click é para ver um relatório mas mas não é entre datas.Este é o botão da minha pergunta acima? Se for, você precisa passar o valor para o parâmetro Data.Mas, se o objetivo deste botão for mostrar os dados do ano corrente, então você não precisaria mesmo do parâmetro, mas a consulta teria que mudar denovo:SELECTextract(year from data) as Ano, extract(month from data) as Mes, T.* from Agenda T WHERE extract(year from data) = extract(year from date) Order by 1, 2, Clube,Escalaoveja que usamos a função date do banco, logo será usada a data corrente.Da as variabe D,M,A is declared bat never used in EndOfTheMonth. posso remover elas é isso?Com certeza!Abraços e até amanhã. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 António44 Postado Janeiro 3, 2009 Autor Denunciar Share Postado Janeiro 3, 2009 mas você está passando parâmetros para ela? Em qual botão você está fazendo isto?Ou, por outro lado, você alterou esta SQL, então por acaso você não esqueceu de alterar a propriedade Params, de modo a ter agora o parâmetro Data, ao invés de DataIni e DataFim?Eu mudei o parâmetro Data,mas eu terei que ter sempre uma data...''Query1.Params[0].AsDate := Date1.Date;''ou não é preciso?O SQL está directo no componente Tquery1.SQL SELECTextract(year from data) as Ano, extract(month from data) as Mes, T.* from Agenda T WHERE extract(year from data) = extract(year from date) Order by 1, 2, Clube,Escalao procedure TRelatorio.FlatSpeedButton5Click(Sender: TObject); begin With Report4 do begin Query1.Active := false; Query1.Params[0].AsDate := Date1.Date; Query1.Prepare; Query1.Active := true; QuickRep1.preview; end; end;Continua a não dar. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Janeiro 3, 2009 Denunciar Share Postado Janeiro 3, 2009 Ou, por outro lado, você alterou esta SQL, então por acaso você não esqueceu de alterar a propriedade Params, de modo a ter agora o parâmetro Data, ao invés de DataIni e DataFim?Eu mudei o parâmetro Data,mas eu terei que ter sempre uma data...''Query1.Params[0].AsDate := Date1.Date;''ou não é preciso?António44, acho que estamos com um problema sério de comunicação. :huh: Com esta consulta que você postou (abaixo), vejo que você mudou o SQL para a última opção que citei no post anterior e que parece-me você não entendeu - usar o ano corrente: "Mas, se o objetivo deste botão for mostrar os dados do ano corrente, então você não precisaria mesmo do parâmetro, mas a consulta teria que mudar denovo"O SQL está directo no componente Tquery1.SQL SELECTextract(year from data) as Ano, extract(month from data) as Mes, T.* from Agenda T WHERE extract(year from data) = extract(year from date) Order by 1, 2, Clube,EscalaoLogo, com esta consulta, não é para ser usado o parâmetro, simplesmente porque ele não está sendo declarado.Acredito que você precise ler um pouco sobre este tipo de assunto, porque estamos "a dar tiros para todos os lados", e não é o ideal. Temos que saber onde mirar e atirar no lugar certo. ;)Para não ter dúvidas futuras:Declaração de parâmetros no instrução SQL dos componentes tipo queryIsto é feito quando você coloca os dois pontos (":") seguido de um identificador e antes de abrir a consulta, você deve inicializar o valor deste parâmetro normalmente utilizando o método ParamByName(<identificador>) (ou Params[<índice_param>]) do dataset (lembrando que se o componente de acesso for da paleta ADO, ele deve ser antecedido por Parameters, ou seja, dataset.Parameters.ParamByName(<identificador>).Value := <valor>).Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 António44 Postado Janeiro 3, 2009 Autor Denunciar Share Postado Janeiro 3, 2009 :( Olhe Micheus eu vou mesmo desistir desta consulta por ano...não tou conseguindo fazer isto funcionar,fico com a consulta entre datas que está funcionando bem. Já tentei de varias maneiras e só gera erro...e não estou conseguindo ver onde é ?Obrigado por ter tentado ajudar-me.Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Janeiro 3, 2009 Denunciar Share Postado Janeiro 3, 2009 (editado) eu vou mesmo desistir desta consulta por ano...não tou conseguindo fazer isto funcionar,fico com a consulta entre datas que está funcionando bem.Não deveria desistir tão facilmente assim. Observe que esta opção era para ser a mais simples delas. Deve ser algo que você deixou perdido nestas tantas alterações que fez.Eu sugiro que você remova o componente TQuery que você está usando nesta consulta problemática, coloque um novo componente e comece a configurá-lo tudo de novo.Já tentei de varias maneiras e só gera erro...e não estou conseguindo ver onde é ?O problema de quem pede por ajuda, assim como você, é que geralmente partem do princípio de que, do outro lado, sabemos o que estão fazendo. E isto não é verdade.Veja que não tenho como ajudá-lo se não me disse que erro está havendo - não basta dizer que "dá erro", tem que dizer qual a mensagem de erro, se ela ocorre na compilação ou na execução.Fique a vontade para perguntar, eu ainda não desisti. ;)Abraços Editado Janeiro 3, 2009 por Micheus Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 António44 Postado Janeiro 3, 2009 Autor Denunciar Share Postado Janeiro 3, 2009 (editado) Eu usei assim e organiza o relatório por ano dá tudo de 2008 e o que tem de 2009.mostra tudo o que está gravado e organiza pelo ano.SELECT extract(year from data) as Ano, extract(month from data) as Mes, T.* from Agenda T WHERE extract(year from data) = extract(year from data) Order by 1, 2, Clube,Escalao procedure TRelatorio.FlatSpeedButton5Click(Sender: TObject); begin With Report4 do begin Query1.Active := false; Query1.Prepare; Query1.Active := true; QuickRep1.preview; end; end; Mas se usar assim. SELECT extract(year from data) as Ano, extract(month from data) as Mes, T.* from Agenda T WHERE extract(year from data) = extract(year from:Data) Order by 1, 2, Clube,Escalao procedure TRelatorio.FlatSpeedButton5Click(Sender: TObject); begin With Report3 do begin Query1.Active := false; Query1.Params[0].AsDate := Date1.Date; Query1.Prepare; Query1.Active := true; QuickRep1.preview; end; end;Gera um erro na execução do FlatSpeedButton5Click ''Type mismatch in expression EDBEngineError''Aqui o parâmetro ''Query1.Params[0].AsDate := Date1.Date;'' que é um ''DateEdit'' eu pretendia selecionar o ano exemplo '' 2008'' e me mostrava só os registos feitos em 2008 dede Janeiro a dezembro..., se tivesse outra data de 2009 daria tudo só de 2009...só que no DateEdit ele data 03-01-2009 é daqui que extraimos o ano ''extract(year from data) = extract(year from:Data) '' não é verdade? Abraço Micheus. Editado Janeiro 3, 2009 por António44 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Janeiro 3, 2009 Denunciar Share Postado Janeiro 3, 2009 SELECT extract(year from data) as Ano, extract(month from data) as Mes, T.* from Agenda T WHERE extract(year from data) = extract(year from data) Order by 1, 2, Clube,Escalao Aqui é desatenção sua. Olhe de novo o post onde passei esta consulta e observe que ainda citei abaixo: "veja que usamos a função date do banco, logo será usada a data corrente." E voce colocou lá data, logo é claro que vai listar tudo o que você tiver dentro da tabela. Mas se usar assim. SELECT extract(year from data) as Ano, extract(month from data) as Mes, T.* from Agenda T WHERE extract(year from data) = extract(year from:Data) Order by 1, 2, Clube,Escalao procedure TRelatorio.FlatSpeedButton5Click(Sender: TObject); begin With Report3 do begin Query1.Active := false; Query1.Params[0].AsDate := Date1.Date; Query1.Prepare; Query1.Active := true; QuickRep1.preview; end; end;Gera um erro quando carrego no botão ''Type mismatch in expression EDBEngineError''Nesta consulta, acho que pode ser por conta do nome do parâmetro, o qual sugeri o mesmo nome do campo da tabela, ou a falta de espaço na função extract, entre o from e ":".Para testar, faça o seguinte, troque a linha:WHERE extract(year from data) = extract(year from:Data)porWHERE extract(year from data) = extract(year from :DatReferencia) (com espaço antes do ":")Aqui no parâmetro ''Query1.Params[0].AsDate := Date1.Date;'' que é um ''dateedit'' eu metia por exemplo 31-12-2008 e me mostrava só os registos feitos em 2008 dede Janeiro a dezembro..., se tivesse outra data de 2009 daria só de 2009.Aqui você me deixa em dúvida, novamente. Isto que você diz, me parece ser o que deveria ocorrer. O que está de errado, ou quando foi que deixou de ser assim. :huh: Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 António44 Postado Janeiro 4, 2009 Autor Denunciar Share Postado Janeiro 4, 2009 WHERE extract(year from data) = extract(year from :DatReferencia) (com espaço antes do ":")eu usei assim e deu o mesmo erro ''Type mismatch in expression EDBEngineError''Aqui é desatenção sua. Olhe de novo o post onde passei esta consulta e observe que ainda citei abaixo: "veja que usamos a função date do banco, logo será usada a data corrente."E voce colocou lá data, logo é claro que vai listar tudo o que você tiver dentro da tabela. eu usei ''date'' e deu erro ''invalid word keyword Token:date. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Janeiro 4, 2009 Denunciar Share Postado Janeiro 4, 2009 (editado) WHERE extract(year from data) = extract(year from :DatReferencia) (com espaço antes do ":") eu usei assim e deu o mesmo erro ''Type mismatch in expression EDBEngineError''eu usei ''date'' e deu erro ''invalid word keyword Token:date.Ok. Acho que o desatento sou eu. :blush: Lembrando de que estamos falando de tabelas Paradox (ou Piradox, como outros colegas já o chamaram) e tendo ele várias limitações, vejo que esta deve ser uma delas. Ainda que houvesse suporte ao que eu queria lhe sugerir, não seria usando DATE, mas sim CURRENT_DATE. Só que olhando no help "Local SQL", consta: "The following SQL-92 language elements are not used in local SQL." e CURRENT_DATE é um dos elementos não suportados. Façamos o seguinte, modifique mais uma vez a consulta para o filtro por ano: SELECT extract(year from data) as Ano, extract(month from data) as Mes, T.* from Agenda T WHERE extract(year from data) = :pAno Order by 1, 2, Clube,Escalaoe, como você usa o D3, vamos ter que dar uma voltinha para extrair o ano da data digitada. Assim, o parâmetro será passado com esta linhaQuery1.Params[0].AsInteger := StrToInt(FormatDateTime('yyyy', Date1.Date));Acho que dessa vez a coisa anda. :DAbraços Editado Janeiro 4, 2009 por Micheus Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 António44 Postado Janeiro 4, 2009 Autor Denunciar Share Postado Janeiro 4, 2009 (editado) Acho que dessa vez a coisa anda.E por fim a coisa deu certo... :D eu que já estava para desistir,mas graças a você Micheus acabou tudo dando certinho.O problema era mesmo na hora de extrair o ano da data no DateEdit...simples B) Mais uma vez obrigado e se você precisar de algo...que não seja programação.:D porque ai eu ainda sou muito fraquinho.Já agora que terminei o aplicativo,pergunto se você se importa que acrescente seu nome na Form ''Créditos'' você merece.Qualquer coisa disponha um Portugués ao seu dispor aqui.Abraços Editado Janeiro 4, 2009 por António44 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Janeiro 8, 2009 Denunciar Share Postado Janeiro 8, 2009 E por fim a coisa deu certo...Que bom. :DVoce comentou, alguns posts acima, que tem um relatório para cada opção. Caso o lay-out dos relatórios seja o mesmo, você poderia criar as consultas dinamicamente e ajustar o relatório de modo a mostrar os dados conforme opção. Qualquer coisa neste sentido é só voltar ao tópico que continuamos. ;)Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 António44 Postado Janeiro 8, 2009 Autor Denunciar Share Postado Janeiro 8, 2009 Micheus,eu tenho relatórios diferentes,embora os dados estejam todos na mesma DB tanto a informação como o design de cada um deles é diferente não sei o que poderá ser feito mais...quando você fala '' criar as consultas dinamicamente e ajustar o relatório de modo a mostrar os dados conforme opção''. você podia dar-me um pequeno exemplo do que podia fazer?Abraços. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
António44
Boa tarde amigos será que me podem ajudar?
Fiz um programa para gestão de treinos num campo de futebol
Treinam varias equipas e em varios escalões todos os dias.
exemplo:
Olhanense -Infantis
Olhanense -iniciados
Olhanense -Juvenis
Olhanense -juniores
Olhanense -Seniores
Olhanense -Veteranos
Maritimo _ '''''''
MAritimo -'''''''
Fuseta _''''''
Fuseta -''''''' e por ai fora...
é tudo regiatado em tabela Paradox com os seguites campos.
Data,Clube,Escalão,NºAtletas,tempo de utilização.
O que preciso é filtrar entre datas dos resultados desta tabela onde apareça só uma linha para
cada clube e escalão. Clube ,escalão,Total Atletas ,total de registos para cada escalão e
média de atletas.
Exemplo:Maritimo,Iniciados,300,100 presenças,media=3 Atletas
Maritimo,Juniores ,200 ,100 presenças,Média=2 Atletas
Olhanense,Veteranos,100 ,10 Presenças,Média=10 Atletas
será possivel filtrar estes dados e mete-los numa report para impressão.?
Eu ao filtrar aparece os registos todos,isto é de todas as presenças.
Meu E-mail
abotinas@sapo.pt
Link para o comentário
Compartilhar em outros sites
Top Posters For This Question
27
16
9
Dias Populares
Dez 8
9
Jan 2
9
Jan 3
8
Dez 9
5
Top Posters For This Question
António44 27 posts
Micheus 16 posts
Jhonas 9 posts
Dias Populares
Dez 8 2008
9 posts
Jan 2 2009
9 posts
Jan 3 2009
8 posts
Dez 9 2008
5 posts
51 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.