Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ricardo Gaspar

Lembrete Aniversário

Recommended Posts

OK, depois de muitos post's recriei o código e comentei-o.

 

Então vamos dizer como esta a base dados:

Tabela: ani

Campos: primeironome (texto) ; aniversario (date/time) ; alertahora (date/time) short time ; alertadias (number)

 

Exemplo de um registo;

Ricardo ; 05-06-1973 ; 9:00 ; -1

 

Agora vem o código:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%><!-- #include file=Conn/config.inc --><%'Define o LCID para o formato de data em Portugal dd-mm-yyyysession.LCID = 2070'Declaração das variáveis ADODB	Dim strQuery'Formata a data	dim dd, mm, aa		function FormataData(data)			dd = day(data)			mm = month(data)			aa = year(data)				if len(dd) = 1 then dd = "0" & dd				if len(mm) = 1 then mm = "0" & mm					FormataData = cstr(dd & "-" & mm & "-" & aa)		end function	dim data_atual		data_atual = FormataData(Date)	dim niver_dia, niver_mes, niver_ano		niver_dia = Day(data_atual)		niver_mes = Month(data_atual)		niver_ano = Year(data_atual)				if Len(niver_dia) < 2 then					niver_dia = "0"&Day(data_atual)				end if								if Len(niver_mes) < 2 then					niver_mes = "0"&Month(data_atual)				end if'Formata Hora e MinutostrHora = Right("0"&Hour(now),2) &":"& Right("0"&Minute(now),2)'Definição da String SQL formatada para Microsoft Access 2003strQuery = "SELECT primeironome, aniversario, alertahora FROM ani WHERE Day(aniversario) = "&niver_dia&" AND Month(aniversario) = "&niver_mes&" and alertahora = #"&strHora&"#"'Executa a inserção no Banco de Dados RsConn.open strQuery, Conn'Mostra a tabela com os registos	response.Write "<TABLE border='1'>"	response.write "<TR><TD>Primeiro nome</td><TD>Aniversario</TD><TD>Alerta Horas</TD><TD>Alerta Dias</TD></tr>"'Executa o loopwhile not RsConn.eof	response.Write "<TR VALIGN = TOP><TD ALIGN = RIGHT WIDTH = '15%'><FONT COLOR = '#000000' SIZE = '-1'><B>  " & RsConn("primeironome") & "</b></font></td>"	response.Write "<TD ALIGN = RIGHT WIDTH = '15%'><FONT COLOR = '#000000' SIZE = '-1'><B>  " & RsConn("aniversario") & "</b></font></td>"	response.Write "<TD ALIGN = RIGHT WIDTH = '15%'><FONT COLOR = '#000000' SIZE = '-1'><B>  " & RsConn("alertahora") & "</b></font></td><tr>"RsConn.movenextwend'Finaliza a tabela com os registosresponse.write "</TABLE>"%>
Agora por favor uma string sql para o access e não para o sql server porque os comandos são diferentes.

O que eu desejo com este código, viram em cima um exemplo do registo, agora qual o comando ou o código para quando chegar ao dia 04-06-2007, portanto um dia antes do aniversario, o recordset mostre-me o registo que está na base de dados.

 

Nos post's anteriores eu estava adicionar uma data no campo alertadias, agora com esta base de dados tenho um numero neste caso um numero negativo -1 que será 1 dia anterior e assim sucessivamente.

 

A data do computador é 04-06-2007 e a hora 9:00, portanto o output da string strQuery deverá dar-me o registo ricardo.

 

Desculpem lá estar a ser chato, mas já andei aqui as voltas e mais voltas e não consigo realizar o que falta neste código.

 

Obrigado pela colaboração.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguma alma caridosa sabe onde poderei encontrar um código completo parecido com este site: http://www.anniversaryideas.co.uk/reminder_mail.asp

 

Principalmente que tenha isto:

 

How much time before your Wedding Anniversary do you want to be reminded ?

 

1 Day 2 Days 3 Days 1 Month

1 Week 2 Weeks 3 Weeks 3 Months

 

Obrigado

 

PS: Já tentei fazer um, mas falta-me a parte do reminder on 1 day before... não sei como fazer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ricardo, não precisa abrir um novo tópico referente ao mesmo assunto.

 

 

Vamos tentar algo mais simples.

Você já tem a data de nascimento e a quantidade de dias em seu BD?

 

Caso afirmativo sua SQL pode ficar +/- assim:

Select * From SuaTabela Where Day(DataNascimento) = Day(DateAdd("d",Now,DiasAntes)) AND Month(DataAniversario) = Month(DateAdd("d",Now,DiasAntes));

Lembrando que a quantidade de dias DEVE estar positivas pois a data de hoje MAIS a quantidade de dias para avisar TEM que ser igual à data de nascimento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Viva,Obrigado Salgado pela resposta mas eu devo estar a baralhar o sistema neste caso o código todo.Vamos ver então se me explico bem. Todos vocês conhecem o site www.elefante.com não conhecem? Ok um utilizador insere por exemplo uma data de nascimento, e tambem escolhe o lembrete, portanto a que horas e quantos dias antes deseja ser informado. Não preciso que seja por email só preciso de saber qual a string SQL que o mesmo faz para que apareca das datas de aniversários dos registos que estão na base de dados.Pelo que estive a ver o código que eu fiz trabalha bem, mostra-me os aniversariantes do dia atual exemplo 19-05 ou então se eu mudar o sinal para > mostra-me os aniversariantes do dia seguinte. Ate aqui tudo bem.Agora como é que eu hei-de fazer para quando inserir um registo a partir do formulario o mesmo me retorne o valor para quando eu quero ser avisado?Poderei estar a explicar mal, mas se observarmos o site que mencionei o que desejo é exactamente aquilo.Tenho um outro exemplo, eu registei lá a minha data de aniversario que é 05/06/1973 e escolhi para ser avisado um dia antes, por isso recebo um email no dia 04/06/2007 que o ricardo faz anos amanha. Agora eu pergunto quais sao os campos da base de dados e como está feito o codigo principalmente o codigo reminder.asp.Já pesquisei e testei vários códigos mas logo por azar não existe nenhum código disponivel que me ensine ou que me mostre aquilo que pretendo.Por isso venho aqui requisitar ajuda.Obrigado

Ricardo, não precisa abrir um novo tópico referente ao mesmo assunto.Vamos tentar algo mais simples.Você já tem a data de nascimento e a quantidade de dias em seu BD?Caso afirmativo sua SQL pode ficar +/- assim:

Select * From SuaTabela Where Day(DataNascimento) = Day(DateAdd("d",Now,DiasAntes)) AND Month(DataAniversario) = Month(DateAdd("d",Now,DiasAntes));

Lembrando que a quantidade de dias DEVE estar positivas pois a data de hoje MAIS a quantidade de dias para avisar TEM que ser igual à data de nascimento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente adaptar com a SQL que mostrei na minha resposta, começa um novo arquivo e depois que funcionar você vai melhorando a formatação.

 

Vamos tentando que isso vai sair.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Viva Salgado,Falei com um colega meu que é expert em Navision, e como sabem trabalha muito com Sql, disse-lhe o que eu queria e ele fez-me entao o seguinte.Na minha bd criou duas queries uma com o nome de alertas:

SELECT ProximosAniversários.id, ProximosAniversários.PrimeiroNome, ProximosAniversários.Ani.Aniversario, ProximosAniversários.prox, ProximosAniversários.AlertaDias, ProximosAniversários.AlertaHoraFROM ProximosAniversáriosWHERE (((ProximosAniversários.AlertaHora)=Hour(Now()) & ":" & Minute(Now())) AND ((DateDiff("d",Date(),[ProximosAniversários].[prox]))>0) AND ((DateDiff("d",Date(),[ProximosAniversários].[prox1]))>=0) AND ((((DateDiff("d",Date(),[ProximosAniversários].[prox]))=[ProximosAniversários].[AlertaDias]) Or ((DateDiff("d",Date(),[ProximosAniversários].[prox1]))=[ProximosAniversários].[AlertaDias]))<>False));
e outra querie com o nome de ProximosAniversários:
SELECT Ani.*, Ani.Aniversario, Day([Aniversario]) AS Dia, Month([Aniversario]) AS Mês, Year(Date()) AS Ano, Year(Date())+1 AS AnoMais1, CDate(Year(Date()) & "/" & Month([Aniversario]) & "/" & Day([Aniversario])) AS prox, DateDiff("d",Date(),CDate(Year(Date()) & "/" & Month([Aniversario]) & "/" & Day([Aniversario]))) AS Diff_prox, CDate(Year(Date())+1 & "/" & Month([Aniversario]) & "/" & Day([Aniversario])) AS prox1, DateDiff("d",Date(),CDate(Year(Date())+1 & "/" & Month([Aniversario]) & "/" & Day([Aniversario]))) AS Diff_prox1FROM Ani;
e o codigo de busca aniversário:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%><!-- #include file=Conn/config.inc --><%'Define o LCID para o formato de data em Portugal dd-mm-yyyysession.LCID = 2070'Declaração das variáveis ADODB	Dim strQuery'Formata a data	dim dd, mm, aa		function FormataData(data)			dd = day(data)			mm = month(data)			aa = year(data)				if len(dd) = 1 then dd = "0" & dd				if len(mm) = 1 then mm = "0" & mm					FormataData = cstr(dd & "-" & mm & "-" & aa)		end function	dim data_atual		data_atual = FormataData(Date)	dim niver_dia, niver_mes, niver_ano		niver_dia = Day(data_atual)		niver_mes = Month(data_atual)		niver_ano = Year(data_atual)				if Len(niver_dia) < 2 then					niver_dia = "0"&Day(data_atual)				end if								if Len(niver_mes) < 2 then					niver_mes = "0"&Month(data_atual)				end if'Formata Hora e MinutostrHora = Right("0"&Hour(now),2) &":"& Right("0"&Minute(now),2)'Definição da String SQL formatada para Microsoft Access 2003strQuery = "SELECT * from alertas"RsConn.open strQuery, Conn	if rsconn.eof then												response.Write("não existe aniversariantes")					response.End										else				response.Write("Existe aniversariantes e vao ser enviados por email")				Call EnviaEmail			end if'####################################################################################################################Sub EnviaEmail()dim enviaremail, HTML'##################### CORPO DO EMAIL MOSTRANDO OS DADOS FILTRADOS PELA STRING SQL ##################################HTML = "<!DOCTYPE HTML PUBLIC""-//IETF//DTD HTML//EN"">"HTML = HTML & "<html>"HTML = HTML & "<head>"HTML = HTML & "<meta http-equiv=""Content-Type"""HTML = HTML & "content=""text/html; charset=iso-8859-1"">"HTML = HTML & "<meta name=""GENERATOR"""HTML = HTML & " content=""Microsoft Visual Studio 6.0"">"HTML = HTML & "<title>Enviando CDONTS Email Using HTML</title>"HTML = HTML & "</head>"HTML = HTML & "<body bgcolor=""FFFFFF"">"HTML = HTML & "<table width=""100%"" border=""1"">"HTML = HTML & "<TR Align=""top"">"HTML = HTML & "<TD width=""15%"">Nome</td><td width=""15%"">Aniversario</td><td width=""15%"">Alerta</td>"HTML = HTML & "</TR>"do while not rsconn.eofHTML = HTML & "<TR align=""top"">"HTML = HTML & "<td width=""15%""><Font color=""000000"" size=""1"">"HTML = HTML & Rsconn("primeironome")HTML = HTML & "</td>"HTML = HTML & "<td width=""15%""><Font color=""000000"" size=""1"">"HTML = HTML & Rsconn("aniversario")HTML = HTML & "</td>"HTML = HTML & "<td width=""15%""><Font color=""000000"" size=""1"">"HTML = HTML & Rsconn("alertadias")HTML = HTML & "</td>"rsconn.movenextloopHTML = HTML & "</tr>"HTML = HTML & "</table>"HTML = HTML & "</body>"HTML = HTML & "</html>"'##################### FIM DO CORPO DO EMAIL ##########################################################################Set enviarmail = server.createobject("CDONTS.NewMail")enviarmail.From = "ptserverxp0" ' $ENVIAR PARA QUEUE EM CASA DESKTOPenviarmail.to = "rgaspar@rgaspar.pt"'enviarmail.cc = "enviar cc"'enviarmail.bcc = "enviar bcc"enviarmail.subject = "Aniversarios"enviarmail.bodyformat = 0 '#Set the e-mail body format (0=HTML 1=Text)enviarmail.mailformat = 0 '#Set the mail format (0=MIME 1=Text)enviarmail.importance = 1 '#Importance of the e-mail (0=Low, 1=Normal, 2=High)enviarmail.body = HTML '# Variavel do CORPO DO EMAILOn Error Resume Next '#Trata dos errosenviarmail.send		If Err <> 0 Then 				Response.Write "Ocorreu o erro: " & Err.Description 		Else				Response.Write("Enviado com Sucesso!")		set RsConn = nothing		Set Conn = nothing		RsConn.Close		Conn.Close		End Ifset enviarmail = nothingEnd Sub'#######################################################################################################################%>
Apenas tenho a dizer que funciona tudo as mil maravilhas envia-me os aniversariantes por email consoante aqui que requisitei. O problema é que as strings que o mesmo fez não percebi nadinha de nada :(Db Tabela: aniCampos: id, primeironome, aniversario, alertahora, alertadiasSe observarem bem o código a string sql apenas vai buscar a query alertas e depois transporta tudo para o site. Vamos imaginar o seguinte. Eu inseri um aniversario dia 22-05-1945, e queria ser avisado um dia antes, portanto dia 21-05 e as 22:05, o sistema faz um recordset e verifica se existe um registo com alertadia 1 (1 dia anterior), a hora coencidente com a hora actual e o aniversario neste caso o dia, e voila o registo aparece.Não existe uma maneira mais facil de fazer isto?Esta a funcionar sim esta, mas as duas queries fazem-me uma confusao que nem imaginam :)Abraço a todos

Tente adaptar com a SQL que mostrei na minha resposta, começa um novo arquivo e depois que funcionar você vai melhorando a formatação.Vamos tentando que isso vai sair.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.