Ir para conteúdo

Arquivado

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

Helinho Coelho

Armazenar resultados de um WHILE dentro de uma SESSION

Recommended Posts

Olá,

 

Como faço para armazenar todo o resultado de uma WHILE dentro de uma SESSION?

DocCL = RSarquivos("documento")
VencCL = RSarquivos("dataVENC")

While Not RSarquivos.EOF
    "Documento: "&DocCL&" | Vencimento: "&VencCL&"<br>"
    RSarquivos.MoveNext
Wend


Session("listaDOC") = ???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cria uma váriavel antes.

Dim variavel As String 
While Not RSarquivos.EOF
    variavel = "Documento: "&DocCL&" | Vencimento: "&VencCL&"<br>"
    "Documento: "&DocCL&" | Vencimento: "&VencCL&"<br>"
    RSarquivos.MoveNext
Wend


Session("listaDOC") = variavel

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá leodiegoo, obrigado pelas informações!

 

Eu fiz de acordo com as suas instruções mas deu o seguinte erro:

Erro de compilação do Microsoft VBScript erro '800a0401'

Fim da instrução esperado

/sistema/atualizar.asp, linha 205

Dim variavel As String
------------^

Compartilhar este post


Link para o post
Compartilhar em outros sites

tire o As String, deixe apenas dim, mas antes sete o Option Explicit no 1ª linha do code. vc também pode jogá-lo dentro de um array, depois pode recuperar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Xanburzum,

 

Fiz as alterações de acordo com sua sugestão e entrou em um tipo de "loop eterno" não roda a página e dá "Tempo limite de script expirado".

 

O código pega todos os E-MAILS de uma mesma REMESSA e agrupa de forma a enviar apenas 1 e-mail de notificação ao invés de vários, caso o cliente esteja inserido na remessa mais de uma vez. Até aí tudo bem, isso tá funfando legal (RSemail). O problema é que eu quero enviar também a lista de arquivos do cliente caso haja mais de um arquivo dentro da remessa. Um vai, mas quando tem mais de um não estou conseguindo imprimir. Só estou querendo que a variavel "listaDOC" seja preenchida com o WHILE / WEND do RSarqCL apontado pelas setas. Abaixo está o código da página:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<% Option Explicit %>
<!--#include file="../Connections/conexao.asp" -->

<%
	Dim quemCheck, checkup, RSdoc, RSemail, RSarqCL, nRM, MailCL, NomeCL, TipoCL, VencCL, Frase, ArqLoop, listaDOC
	quemCheck = Request.QueryString("nomeCheck")
	nRM = Request.QueryString("nRM")
	checkup = "1"

	Set RSdoc = conexao.Execute("SELECT * FROM arquivos WHERE numRemessa = '"&nRM&"' ")
	Set RSemail = conexao.Execute("SELECT * FROM arquivos INNER JOIN usuarios ON (usuarios.cod_cliente = arquivos.cod_cliente) WHERE arquivos.numRemessa = '"&nRM&"' GROUP BY usuarios.email ")
	Set RSarqCL = conexao.Execute("SELECT * FROM arquivos INNER JOIN usuarios ON (usuarios.cod_cliente = arquivos.cod_cliente) WHERE arquivos.numRemessa = '"&nRM&"' GROUP BY usuarios.email ")


		While Not RSemail.EOF

			MailCL = RSemail("email")
			NomeCL = RSemail("apelido")
			TipoCL = RSarqCL("txt_tipo")
			VencCL = RSarqCL("dataVENC")

			On Error Resume Next


>>>>>>>>>AQUI>>>>>>>>>	While Not RSarqCL.EOF
			  ArqLoop = "Documento:"&TipoCL&" | Vencimento:"&VencCL&"<br>"
			  RSarqCL.MoveNext
			Wend
			Session("listaDOC") = ArqLoop
>>>>>>>>>AQUI>>>>>>>>>	listaDOC = Session("listaDOC")
			
			
			Set objCDOSYSconf...
			(*aqui vem o código de configurações de SMTP)
			... objCDOSYSmail.Subject = ""&NomeCL&" - Novo documento disponibilizado"

			strBody = "" & _
			""&Frase&"" & _
>>>>>>>>>AQUI>>>>>>>>>	""&listaDOC&"" & _
			"<br><br>" & _
			"Acesso: <a href='sistema'>clique aqui para acessar o sistema!</a><br><br>" & _
			"<font size='3' color='#BEBEBE'><i><b>OBS:</b> caso esta mensagem tenha caído em sua caixa de SPAM ou Lixo Eletrônico adicione o e-mail <b>email@email.com.br</b> à sua lista de contatos!</i></font>"

			objCDOSYSMail.HTMLBody = strBody
			objCDOSYSMail.Send 

			Set objCDOSYSMail = Nothing 
			Set objCDOSYSConf = Nothing

			RSemail.MoveNext
		Wend


Compartilhar este post


Link para o post
Compartilhar em outros sites

os outros arquivos são grandes, qual o tamanho ? dependendo de seu host ele pode bloquear, verifique o limite máximo de tamanho para envio de arquivo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia! O código não envia arquivo nenhum, somente a informação de quais arquivos estão no sistema. Dispara apenas o registro do banco de dados, apenas caracteres em um corpo de e-mail.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com o código mais abaixo eu consigo enviar um e-mail para o cliente que chega da seguinte forma:

 

<-- como chega o e-mail para o cliente (inicio) -->

Olá! Você tem disponível novo DOCUMENTO de seu interesse no site.

 

Documento: INSS/PIS | Vencimento: 02/11/2015


Acesso: clique aqui para acessar o sistema

OBS: caso esta mensagem tenha caído em sua caixa de SPAM ou Lixo Eletrônico adicione o e-mail dominio@dominio.com.br à sua lista de contatos!

<-- como chega o e-mail para o cliente (fim) -->

 

 

Abaixo está o código ASP para o envio. Onde está a indicação (>>>>>>> AQUI >>>>>>>) mostra o WHILE que funciona corretamente mas não estou conseguindo fazer-lo ficar com todos os registros de Documento/Vencimento dentro da string "listaDOC".

 

Note que acima, no e-mail do cliente (em vermelho), o código só retorna um registro apenas (Documento: INSS/PIS | Vencimento: 02/11/2015) sendo que no caso ele tem mais registros de documentos no sistema.

	Dim quemCheck,checkup,RSdoc,RSemail,RSarqCL,RSloop,SQL,nRM,MailCL,NomeCL,TipoCL,VencCL,Frase,ArqLoop,listaDOC
	quemCheck = Request.QueryString("nomeCheck")
	nRM = Request.QueryString("nRM")
	checkup = "1"

	Set RSdoc = conexao.Execute("SELECT * FROM arquivos WHERE numRemessa = '"&nRM&"' ")
	Set RSemail = conexao.Execute("SELECT * FROM arquivos INNER JOIN usuarios ON (usuarios.cod_cliente = arquivos.cod_cliente) WHERE arquivos.numRemessa = '"&nRM&"' GROUP BY usuarios.email ")
	Set RSarqCL = conexao.Execute("SELECT * FROM arquivos INNER JOIN usuarios ON (usuarios.cod_cliente = arquivos.cod_cliente) WHERE arquivos.numRemessa = '"&nRM&"' GROUP BY usuarios.email ")

		While Not RSemail.EOF
			MailCL = RSemail("email")
			NomeCL = RSemail("apelido")
			TipoCL = RSarqCL("txt_tipo")
			VencCL = RSarqCL("dataVENC")

			On Error Resume Next
			
			If RSdoc("cod_cliente") = "99999" Then
				Frase = "<p><b>Olá! Você tem disponível novo COMUNICADO de seu interesse no site.</b></p>"
			Else
				Frase= "<p><b>Olá! Você tem disponível novo DOCUMENTO de seu interesse no site.</b></p>"
			End If
			
			
>>>>>>> AQUI >>>>>>>	While Not RSarqCL.EOF
				ArqLoop = "Documento: "&TipoCL&" | Vencimento: "&VencCL&"<br>"
				RSarqCL.MoveNext
			Wend
>>>>>>> AQUI >>>>>>>	listaDOC = ArqLoop
			
			
			Set objCDOSYSconf = CreateObject("cdo.configuration")
			objCDOSYSconf.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
			objCDOSYSconf.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp-web.dominio.net"
			objCDOSYSconf.Fields.Update

			Set objCDOSYSmail = CreateObject("cdo.message")
			objCDOSYSmail.configuration = objCDOSYSconf
			objCDOSYSmail.BodyPart.Charset = "UTF-8" 
			objCDOSYSmail.From = "dominio@dominio.com.br"
			objCDOSYSmail.To = MailCL
			objCDOSYSmail.Subject = ""&NomeCL&" - Novo documento disponibilizado"

			strBody = "" & _
			""&Frase&"" & _
>>>>>>> AQUI >>>>>>>	""&listaDOC&"" & _
			"<br><br>" & _
			"Acesso: <a href='http://www.dominio.com.br/sistema'>clique aqui para acessar o sistema.</a><br><br>" & _
			"<font size='3' color='#BEBEBE'><i><b>OBS:</b> caso esta mensagem tenha caído em sua caixa de SPAM ou Lixo Eletrônico adicione o e-mail <b>email@email.com.br</b> à sua lista de contatos!</i></font>"

			objCDOSYSMail.HTMLBody = strBody
			objCDOSYSMail.Send 

			Set objCDOSYSMail = Nothing 
			Set objCDOSYSConf = Nothing

			RSemail.MoveNext
		Wend

Compartilhar este post


Link para o post
Compartilhar em outros sites

provavelmente é sua estrutura de while, que não está entrando no movenext do outro recordset. aparentemente está correto, mas aconselho a rever seu código. e também pode fazer um teste usando o objeto recordset, chamando a SQL e executando-a através dele. faça apenas para testar.

 

tipo:

 

set RSarqCL = Server.CreateObject(“ADODB.Recordset”)
‘– SQLarqCL="SELECT * FROM arquivos INNER JOIN usuarios ON (usuarios.cod_cliente = arquivos.cod_cliente) WHERE arquivos.numRemessa = '"&nRM&"' GROUP BY usuarios.email "
RSarqCL.Open strSQL, conexao,1,3

 

teste assim com o objeto recordset executando a SQL e atribua os while _EOF_wend e os movenext

Compartilhar este post


Link para o post
Compartilhar em outros sites

Xan,

 

Eu já consegui fazer funcionar os registros e agora estão aparecendo todos de acordo com o RSarqCL. Eu retirei o "GROUP BY usuarios.email" do RSarqCL e funfou beleza.

 

Depois criei um Array mas não estou conseguindo fazer este Array ficar dinâmico. Você pode me ajudar com o código abaixo? O que preciso mudar para o "MeuArray" ficar dinâmico?

Dim RSarqCL,nRM,idCL,MeuArray,VencCL,TipoCL

	Set RSarqCL = conexao.Execute("SELECT * FROM arquivos INNER JOIN usuarios ON (usuarios.cod_cliente = arquivos.cod_cliente) WHERE arquivos.numRemessa = '"&nRM&"' ")


			idCL = 0
			MeuArray = array() 

			While Not RSarqCL.EOF
				For i = 0 To RSarqCL.EOF 
				VencCL = RSarqCL("dataVENC")
				TipoCL = RSarqCL("txt_tipo")
				idCL = idCL + 1
				MeuArray = "<b>"&idCL&"</b>) Vencimento: <b style='color:#900'>"&VencCL&"</b> | Documento: <b>"&TipoCL&"</b><br>" 
				Next 
				RSarqCL.Movenext 
			Wend
			Response.Write(MeuArray)

 

* O Código acima está me retornando o seguinte:

6) Vencimento: 10/01/2015 | Documento: DARF

 

 

* Quando na verdade deveria me retornar assim:

1) Vencimento: 05/01/2015 | Documento: PIS/COFIS

2) Vencimento: 07/01/2015 | Documento: PIS/COFIS
3) Vencimento: 09/01/2015 | Documento: PIS/COFIS
4) Vencimento: 06/01/2015 | Documento: DARF
5) Vencimento: 08/01/2015 | Documento: DARF
6) Vencimento: 10/01/2015 | Documento: DARF

 

 

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

nem precisa de array

 

Faz assim.

 

Cria uma variavel e coloca todo o conteudo separado por um caracter. Exemplo

 

Dim ListaDoc

 

While not ....

 

ListaDoc = ListaDoc & SEU CONTEUDO & |

 

movenext

 

Depois é só mostrar o conteúdo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Woohoo!!! Que beleza, hein Ronaldo!? Funcionou perfeitamente sem precisar usar o Array... muuuuuuuito obrigado pela sua singela dica!!! Valeu. O código funcionando ficou assim:

Dim RSarqCL,nRM,idCL,VencCL,TipoCL,listaDOC

	Set RSarqCL = conexao.Execute("SELECT * FROM arquivos INNER JOIN usuarios ON (usuarios.cod_cliente = arquivos.cod_cliente) WHERE arquivos.numRemessa = '"&nRM&"' ")


			idCL = 0

			While Not RSarqCL.EOF
				For i = 0 To RSarqCL.EOF
				VencCL = RSarqCL("dataVENC")
				TipoCL = RSarqCL("txt_tipo")
				idCL = idCL + 1
				listaDOC = listaDOC & "<b>"&idCL&"</b>) Vencimento: <b style='color:#900'>"&VencCL&"</b> | Documento: <b>"&TipoCL&"</b><br>"
				Next 
				RSarqCL.Movenext 
			Wend
			
			Response.Write listaDOC

* Perfeito, agora o código acima através do "Response.Write listaDOC" me retorna o seguinte:

1) Vencimento: 16/01/2015 | Documento: ICMS
2) Vencimento: 15/01/2015 | Documento: ICMS
3) Vencimento: 11/01/2015 | Documento: COMUNICADO DIMOB
4) Vencimento: 12/01/2015 | Documento: COMUNICADO DIMOB
5) Vencimento: 13/01/2015 | Documento: COMUNICADO DIMOB
6) Vencimento: 14/01/2015 | Documento: ICMS

 

 

 

Um forte abraço a todos e ESTE TÓPICO ESTÁ RESOLVIDO!

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.