Fórum Duvida Cruel - A respeito de Datas #215870
21/02/2004
0
var
Dia, Mes, Aviso : Integer;
Arq : TextFile;
Linha : String;
begin
AssignFile(Arq, ´C:\Aniversario.Txt´);
Reset(Arq);
Dia := StrToInt(FormatDateTime(´DD´,Date));
Mes := StrToInt(FormatDateTime(´MM´,Date));
While not Eof(Arq) do
Readln(Arq,Linha);
Aviso := StrToInt(Linha);
Dia := Aviso + Dia;
Query1.Close;
Query1.SQL.Clear;
Query1.Sql.text := ´SELECT * FROM CLIENTES WHERE EXTRACT(DAY FROM DT_NASCIMENTO)=:pDIA AND EXTRACT(MONTH FROM DT_NASCIMENTO)=:pMES´;
Query1.ParamByName(´pDia´).AsInteger := Dia;
Query1.ParamByName(´pMes´).AsInteger := Mes;
Query1.Prepare;
Query1.Open;
Label1.Caption := ´Existe(m) ´+IntToStr(Query1.RecordCount) + ´ cliente(s) fazendo aniversário´;
CloseFile(Arq);
end;
tenho esse código que retorna alguns dias antes (o usuário que estipula o dia) apenas akeles clientes que irão fazer aniversário no mês. Mas cai numa dúvida cruel! Como vou fazer para saber se esse dia é válido? Exemplo, dia 30 e 31 não existem no mês de Fevereiro, mas se o meu usuário cadastrar no arquivo (não no banco de dados, mas no aviso) um dia que somado com o dia atual cair num desses dias? Tipo 21/02/2004 somado com 10 irá para 31/02/2004 (NÃO EXISTE ESSE DIA) o computador sabe, mas e meu sistema????
Vale Também para akeles meses que não vão até dia 31.
Valeu pela ajuda
Facc
Curtir tópico
+ 0
Responder
Posts
21/02/2004
Facc
// acrescente a unit DateUtils na cláusula uses
var
Aviso : Integer;
Arq : TextFile;
Linha : String;
Data: TDateTime;
Plural: string[1];
begin
AssignFile(Arq, ´C:\Aniversario.Txt´);
Reset(Arq);
While not Eof(Arq) do
Readln(Arq,Linha);
CloseFile(Arq);
try
Aviso := StrToInt(Linha);
except
Aviso := 0;
end;
Data := Date + Aviso; // já traz a data correta, somando-se os dias
Query1.Close;
Query1.SQL.Clear;
Query1.Sql.Text := ´SELECT COUNT(DT_NASCIMENTO) TOTAL_CLIENTES FROM CLIENTES ´+
´ WHERE EXTRACT(DAY FROM DT_NASCIMENTO) = :pDIA ´+
´ AND EXTRACT(MONTH FROM DT_NASCIMENTO) = :pMES´;
Query1.ParamByName(´pDia´).AsInteger := DayOf(Data);
Query1.ParamByName(´pMes´).AsInteger := MonthOf(Data);
Query1.Prepare;
Query1.Open;
if Query1.FieldByName(´TOTAL_CLIENTES´).AsInteger > 1
then Plural := ´s´
else Plural := ´´;
Label1.Caption := ´Há ´+Query1.FieldByName(´TOTAL_CLIENTES´).AsString+ ´ cliente´+Plural+´ fazendo aniversário´;
end;
daí no caso se eu quiser que apareça o nome do cliente que irá fazer aniversário, é só colocar depois do SELECT? eu tentei fazer mas retornou erro
Responder
Gostei + 0
22/02/2004
Rômulo Barros
Isso mesmo, você deverã adicionar na cláusula SELECT o campo referente ao nome do cliente e, ao final do seu sql, agrupar pelo nome do cliente:
// acrescente a unit DateUtils na cláusula uses
var
Aviso : Integer;
Arq : TextFile;
Linha : String;
Data: TDateTime;
Plural: string[1];
begin
AssignFile(Arq, ´C:\Aniversario.Txt´);
Reset(Arq);
While not Eof(Arq) do
Readln(Arq,Linha);
CloseFile(Arq);
try
Aviso := StrToInt(Linha);
except
Aviso := 0;
end;
Data := Date + Aviso; // já traz a data correta, somando-se os dias
Query1.Close;
Query1.SQL.Clear;
Query1.Sql.Text := ´SELECT [color=red:db9f1eecd8]NOMEDOCLIENTE[/color:db9f1eecd8],COUNT(DT_NASCIMENTO) TOTAL_CLIENTES FROM CLIENTES ´+
´ WHERE EXTRACT(DAY FROM DT_NASCIMENTO) = :pDIA ´+
´ AND EXTRACT(MONTH FROM DT_NASCIMENTO) = :pMES [color=red:db9f1eecd8]GROUP BY NOMEDOCLIENTE[/color:db9f1eecd8]´;
Query1.ParamByName(´pDia´).AsInteger := DayOf(Data);
Query1.ParamByName(´pMes´).AsInteger := MonthOf(Data);
Query1.Prepare;
Query1.Open;
if Query1.FieldByName(´TOTAL_CLIENTES´).AsInteger > 1
then Plural := ´s´
else Plural := ´´;
Label1.Caption := ´Há ´+Query1.FieldByName(´TOTAL_CLIENTES´).AsString+ ´ cliente´+Plural+´ fazendo aniversário´;
end;
// acrescente a unit DateUtils na cláusula uses
var
Aviso : Integer;
Arq : TextFile;
Linha : String;
Data: TDateTime;
Plural: string[1];
begin
AssignFile(Arq, ´C:\Aniversario.Txt´);
Reset(Arq);
While not Eof(Arq) do
Readln(Arq,Linha);
CloseFile(Arq);
try
Aviso := StrToInt(Linha);
except
Aviso := 0;
end;
Data := Date + Aviso; // já traz a data correta, somando-se os dias
Query1.Close;
Query1.SQL.Clear;
Query1.Sql.Text := ´SELECT [color=red:db9f1eecd8]NOMEDOCLIENTE[/color:db9f1eecd8],COUNT(DT_NASCIMENTO) TOTAL_CLIENTES FROM CLIENTES ´+
´ WHERE EXTRACT(DAY FROM DT_NASCIMENTO) = :pDIA ´+
´ AND EXTRACT(MONTH FROM DT_NASCIMENTO) = :pMES [color=red:db9f1eecd8]GROUP BY NOMEDOCLIENTE[/color:db9f1eecd8]´;
Query1.ParamByName(´pDia´).AsInteger := DayOf(Data);
Query1.ParamByName(´pMes´).AsInteger := MonthOf(Data);
Query1.Prepare;
Query1.Open;
if Query1.FieldByName(´TOTAL_CLIENTES´).AsInteger > 1
then Plural := ´s´
else Plural := ´´;
Label1.Caption := ´Há ´+Query1.FieldByName(´TOTAL_CLIENTES´).AsString+ ´ cliente´+Plural+´ fazendo aniversário´;
end;
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)