Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Filtrar dados de tabela paradox e visualizar em uma report


António44

Pergunta

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

  • Respostas 51
  • Created
  • Última resposta

Top Posters For This Question

Posts Recomendados

  • 0
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

Link para o comentário
Compartilhar em outros sites

  • 0

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 por António44
Link para o comentário
Compartilhar em outros sites

  • 0
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 por António44
Link para o comentário
Compartilhar em outros sites

  • 0
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 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.
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 contagem
a 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

Link para o comentário
Compartilhar em outros sites

  • 0

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

Usando 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 por António44
Link para o comentário
Compartilhar em outros sites

  • 0
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,Escalao

assim, você terá apenas que passar o valor para o parâmetro Data.

Abraços

Motivo edição: acrescentado a palavra WHERE no SQL.

Editado por Micheus
Link para o comentário
Compartilhar em outros sites

  • 0

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,Escalao

Micheus eu uso o velhinho D3 não tem essa unit DateUtils, assim dá erro ''Invalid use of Keyword. Token: extract(year

abraço.

Editado por António44
Link para o comentário
Compartilhar em outros sites

  • 0

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(year
Deve 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 por Micheus
Link para o comentário
Compartilhar em outros sites

  • 0

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 por António44
Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0
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.

Link para o comentário
Compartilhar em outros sites

  • 0

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

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 :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 por António44
Link para o comentário
Compartilhar em outros sites

  • 0
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 T

WHERE 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,Escalao

veja 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ã.

Link para o comentário
Compartilhar em outros sites

  • 0
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.

Link para o comentário
Compartilhar em outros sites

  • 0
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,Escalao

Logo, 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 query

Isto é 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

Link para o comentário
Compartilhar em outros sites

  • 0

:( 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

Link para o comentário
Compartilhar em outros sites

  • 0
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 por Micheus
Link para o comentário
Compartilhar em outros sites

  • 0

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 por António44
Link para o comentário
Compartilhar em outros sites

  • 0
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)

por

WHERE 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:

Link para o comentário
Compartilhar em outros sites

  • 0

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.
Link para o comentário
Compartilhar em outros sites

  • 0
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,Escalao

e, 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 linha

Query1.Params[0].AsInteger := StrToInt(FormatDateTime('yyyy', Date1.Date));

Acho que dessa vez a coisa anda. :D

Abraços

Editado por Micheus
Link para o comentário
Compartilhar em outros sites

  • 0
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 por António44
Link para o comentário
Compartilhar em outros sites

  • 0
E por fim a coisa deu certo...
Que bom. :D

Voce 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

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.




  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...