Array
(
)

um relatorio de aniversariantes diferente dos outros

Dpinho
   - 12 ago 2004

estou precisando fazer um relatorio com os aniversariantes, esta pronto com a consulta sql funcionando, mas so esta indexando pelo ano e quero que o indice seja pelo dia, no inicio estava saindo certo porem neste mês mudou sozinho sem mexer no programa, não quero aquelas consultas sql que tem dia incial do mes e final, alguem sabe fazer um deste
outro caso, preciso passar o conteurdo de um Memo para o relatorio, não estou conseguindo, se alguem puder ajudar com um exemplo ficaria legal
Obrigado


Macario
   - 12 ago 2004

Olá Programador, boa tarde.

Poste o seu codigo, e diga qual banco usa, e o tipo do campo!


Dpinho
   - 16 ago 2004


Citação:
Olá Programador, boa tarde.

Poste o seu codigo, e diga qual banco usa, e o tipo do campo!


Esta é a consulta:
procedure TfmAniversariantes.SpeedButton1Click(Sender: TObject);
var
Ano,Mes,Dia:word;
begin
Application.CreateForm(TfmRelDatAniver,fmRelDatAniver);
with fmRelDatAniver do
begin
DecodeDate(Date,ano,mes,dia);
QConsulta.Close;
QConsulta.Params.ParamValues[´DataInicial´] := strtoint(Edit1.Text);
QConsulta.Open;
//Texto:= Memo1.Text;
fmRelDatAniver.QuickRep1.Preview;
end;
end;

Aqui Retornar para o Relatorio:
procedure TfmRelDatAniver.QuickRep1BeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
VAR
Ano,Mes,Dia:word;
begin

DecodeDate(QConsulta.FieldByName(´DtNasc´).AsFloat,ano,mes,dia);
IF mes = 1 then QRLabel7.caption := ´GENNAIO´;
if mes = 2 then QRLabel7.Caption := ´FEBBRAIO´;
if mes = 3 then QRLabel7.Caption := ´MARZO´;
if mes = 4 then QRLabel7.Caption := ´APRILE´;
if mes = 5 then QRLabel7.Caption := ´MAGGIO´;
if mes = 6 then QRLabel7.Caption := ´GIUGNO´;
if mes = 7 then QRLabel7.Caption := ´LUGLIO´;
if mes = 8 then QRLabel7.Caption := ´AGOSTO´;
if mes = 9 then QRLabel7.Caption := ´SETTEMBRE´;
if mes = 10 then QRLabel7.Caption := ´OTTOBRE´;
if mes = 11 then QRLabel7.Caption := ´NOVEMBRE´;
if mes = 12 then QRLabel7.Caption := ´DICEMBRE´;

// QRLabel4.caption := FormatDateTime(´dd/mm´,QConsulta.FieldByName(´DtNasc´).AsFloat);
// QRMemo1.Caption := fmAniversariantes.Memo1.Text;

end;

Esta funcionando bem, porem esta saindo com dias fora da ordem exemplo dia primeiro do mês sai no final depende do ano

Meu banco é Paradox em delphi 7


Macario
   - 17 ago 2004

1)- Verifique o formato da data, que vc esta trabalhando.

2-) Isto não está correto:

QConsulta.Params.ParamValues[´DataInicial´] := strtoint(Edit1.Text);


se o seu campo na tabela for tipo data e estiver no formato DD/MM/AAAA
use assim:

QConsulta.Params.ParamValues[´DataInicial´] := strtoDate(Edit1.Text);

Espero ter ajudado.


Dpinho
   - 17 ago 2004


Citação:
1)- Verifique o formato da data, que vc esta trabalhando.

2-) Isto não está correto:

QConsulta.Params.ParamValues[´DataInicial´] := strtoint(Edit1.Text);


se o seu campo na tabela for tipo data e estiver no formato DD/MM/AAAA
use assim:

QConsulta.Params.ParamValues[´DataInicial´] := strtoDate(Edit1.Text);

Espero ter ajudado.


utilizo a função strtoint porque tenho que passar o numero do mês e não a data


Jdteichert
   - 17 ago 2004

Faça assim:

- No SELECT coloque o seu campo data desta forma:

EXTRACT( DAY FROM Tabela.DataNasc ) DiaNasc,
EXTRACT( MONTH FROM Tabela.DataNasc ) MesNasc

- Se precisar filtrar o mês na cláusula WHERE:
EXTRACT( MONTH FROM Tabela.DataNasc ) = :MesAniver

- Para ordenar:
ORDER BY DiaNasc, MesNasc

- Nos parâmetros:
ParamByName(´MesAniver´).AsInteger := iMesAniver